推 rexrainbow:推~ 07/10 16:11
推 jameschen113:讚! 謝謝分享 07/12 11:28
推 huggie:這跟那些popen有什麼樣子的差異? 07/14 13:59
這個 subprocess 好像是看某前輩的 blog 才得知的東西... 這模組提供了更高階的
API,來試圖隱藏不同平台呼叫 process 的細節。 在
http://docs.python.org/lib/module-subprocess.html
有提到它試圖取代以下常用的呼叫:
os.system
os.spawn*
os.popen*
popen2.*
commands.*
至於詳細的用法,可以參考:
http://docs.python.org/lib/node533.html
會藉由簡單範例示範每種不同的呼叫方式...
而在原來的這個問題當中,原 po 一直遇到會出現一個終端機的問題
那是因為如果使用 os.system('test blah blah') 的呼叫,在 windows 會有以下行為:
你的 python 程式 ->(呼叫) cmd.exe ->(呼叫並傳參數 blah blah) test
而在 unix 會有以下行為:
你的 python 程式 ->(呼叫) shell ->(呼叫並傳參數 blah blah) 你想執行的程式
以上如果是使用 subprocess,則語法是
subprocess.call('test blah blah', shell=True)
其中 shell=True 若沒有指定則預設是 False
所以為了要避免出現終端機視窗,最好是可以跳過 cmd.exe/shell 直接呼叫命令
也就是流程變成:
你的 python 程式 ->(呼叫並傳參數 blah blah) test
那使用 subprocess 則就是(預設是 shell=False 所以在這邊省略):
subprocess.call('test blah blah'.split())
至於為何要切成 list 這個就扯到 popen / exec* 這一系列的呼叫實際運作的過程了
其實站在使用者立場可以不用管它,你就記得要切成 list 就對了
--
廢話好像太多了 囧>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.127.40.50
※ 編輯: wawawa 來自: 140.127.40.50 (07/14 23:46)
※ 編輯: wawawa 來自: 140.127.40.50 (07/14 23:47)
→ wawawa:我好像是從 yungyuc 大的 blog 看來的...有點忘了抱歉 Orz 07/14 23:51