[爆卦]python終端機沒反應是什麼?優點缺點精華區懶人包

為什麼這篇python終端機沒反應鄉民發文收入到精華區:因為在python終端機沒反應這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者wawawa (哇哇哇○( ̄﹏ ̄)○)看板Python標題Re: [問題] os.system問...


: 而且還可以繼續按按鈕的嗎?
: 請幫幫忙!!
: 很需要解決這個問題

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.230.101.120
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

你可能也想看看

搜尋相關網站