這是自己做的練習,可能有錯誤,歡迎討論和各種最佳化重構方案。
根據反饋,或者code review,對本篇文章答案或者相關內容的更新補充,一般會被添加在本篇部落格的評論中。
將盡量保證每題的答案代碼是完整的,不僅僅是函數,類或者只是個大概,力求開啟Python 2.7的IDLE,將代碼完整拷貝進去,就能調試運行。
歡迎訪問Balian在部落格園的家。 http://www.cnblogs.com/balian
14-5.
commands.getoutput()。用commands.getoutput()解決前面的問題。
【答案】
commands.getoutput()在unix平台才能運行。參考http://bugs.python.org/issue15073
曾經嘗試在linux的Python 2.5中運行該模組,同樣發現文法問題。因為
Deprecated since version 2.6: The commands module has been removed in Python 3. Use the subprocess module instead.
14-6.
popen()家族。選擇熟悉的系統命令,該命令從標準輸入獲得文本,操作或輸出資料。(a)使用os.popen()與程式進行通訊。輸出到哪兒呢?(b)使用popen2.popen2()代替。
【答案】
(a)代碼如下:
>>> import os>>> command = input('Please input a DOS command: ... ')Please input a DOS command: ... 'dir'>>> k = os.popen(command)>>> k<open file 'dir', mode 'r' at 0x0000000002111420>>>> print k.read() #該語句可以讀出dir的實際輸出
(b)代碼如下:
>>> command = 'dir'>>> import popen2>>> pipe_in, pipe_out = popen2.popen2(command)>>> pipe_in.readlines()#這裡會輸出命令dir的結果。>>> pipe_in.close()
【參考】
http://www.360doc.com/content/12/0131/16/2660674_183157204.shtml
http://linhs.blog.51cto.com/370259/126831
14-7.
subprocess模組。把先前問題的解決方案移植到subprocess模組。
【答案】
>>> import subprocess>>> k = subprocess.call('dir', shell = True)#這裡會輸出命令dir的結果。>>> k0 #這表示命令正確執行了
14-8.
exit函數。設計一個在程式退出時的函數。安裝到sys.exitfunc(),運行程式,示範你的exit函數確實被調用了。
【注】
這裡附一個英文版書中的原題。
【答案】
代碼如下:
import sysdef my_exit(): print 'World' sys.exitfunc = my_exitprint 'Hello'sys.exit(1)print 'there'
【參考】
http://effbot.org/librarybook/sys-exitfunc-example-1.py