這是自己做的練習,可能有錯誤,歡迎討論和各種最佳化重構方案。
根據反饋,或者code review,對本篇文章答案或者相關內容的更新補充,一般會被添加在本篇部落格的評論中。
將盡量保證每題的答案代碼是完整的,不僅僅是函數,類或者只是個大概,力求開啟Python 2.7的IDLE,將代碼完整拷貝進去,就能調試運行。
歡迎訪問Balian在部落格園的家。 http://www.cnblogs.com/balian
【這篇博文可能讓人失望,對不起】
14-9.
Shells。建立shell(作業系統介面)程式。給出接受作業系統命令的命令列介面(任意平台)。
附加題1:支援管道(見os模組中的dup(),dup2()和pipe()函數)。管道過程允許進程的標準輸入串連到另一個進程的標準輸入。
附加題2:用括弧支援逆序的管道,給shell一個函數式編程介面。換句話說,支援更加函數式風格,如sort(grep(ps (-ef), root), -n, +1),而不是ps -ef | grep root | sort -n +1這樣的命令。
【未完】
感覺有難度,暫時押後。
14-10.
fork()/exec*()和spawn*()的比較。使用fork()-exec*()對和spawn*()家族函數有什麼不同?那一組的功能更強?
【未完】
感覺有難度,暫時押後。但可以參考書第429頁表14.6以及
http://blog.csdn.net/small_tina/article/details/8071791
14-11.
產生和執行Python代碼。用funcAttrs.py指令碼(例14.4-實際應該是14.2,書第425頁)加入測試代碼到已有程式的函數中。建立一個測試架構,每次遇到你特殊的函數屬性,它都會運行你的測試代碼。
【未完】
感覺有難度,暫時押後。funcAttrs.py指令碼代碼如下:
def foo(): return Truedef bar(): 'bar() does not do much' return Truefoo.__doc__ = 'foo() does not do much'foo.tester='''if foo(): print 'PASSED'else: print 'FAILED''''for eachAttr in dir(): obj = eval(eachAttr) if isinstance(obj, type(foo)): if hasattr(obj, '__doc__'): print '\nfunction "%s" has a doc string:\n\t%s' % (eachAttr, obj.__doc__) if hasattr(obj, 'tester'): print 'function "%s" has a tester... executing' % eachAttr exec obj.tester else: print 'Function "%s" has no tester... skip ping' % eachAttr else: print '"%s" is not a function' % eachAttr
【執行結果】
"__builtins__" is not a function"__doc__" is not a function"__file__" is not a function"__name__" is not a function"__package__" is not a functionfunction "bar" has a doc string:bar() does not do muchFunction "bar" has no tester... skip pingfunction "foo" has a doc string:foo() does not do muchfunction "foo" has a tester... executingPASSED