為什麼這篇python終端機沒反應鄉民發文收入到精華區:因為在python終端機沒反應這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者wawawa (哇哇哇○( ̄﹏ ̄)○)看板Python標題Re: [問題] os.system問...
: 而且還可以繼續按按鈕的嗎?
: 請幫幫忙!!
: 很需要解決這個問題
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.230.101.120
這個 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)