我正在嘗試編寫一個使用subprocess
模塊的小應用程序。使用子進程wait()和poll()
我的程序調用需要一些時間來處理的外部Bash命令。在此期間,我想向用戶展示如下一系列消息:
正在處理。請稍候...
輸出爲FOO()
我怎樣才能做到這一點使用Popen.wait()
或Popen.poll()
。我讀過,我需要使用Popen.returncode
,但我怎麼能得到它主動檢查狀態,我不知道。
我正在嘗試編寫一個使用subprocess
模塊的小應用程序。使用子進程wait()和poll()
我的程序調用需要一些時間來處理的外部Bash命令。在此期間,我想向用戶展示如下一系列消息:
正在處理。請稍候...
輸出爲FOO()
我怎樣才能做到這一點使用Popen.wait()
或Popen.poll()
。我讀過,我需要使用Popen.returncode
,但我怎麼能得到它主動檢查狀態,我不知道。
兩個
wait()
(與
timeout
指定)和
poll()
回報
None
如果進程尚未完成,而不同的東西,如果
有的處理結束(我認爲一個整數,退出代碼,希望0)。
編輯:
wait
(無超時參數)會阻塞,等待過程來完成。wait
with the timeout argument will wait timeout
seconds for the process to complete。如果沒有完成,它會拋出TimeoutExpired
異常。如果您發現異常,歡迎您繼續,或再次登錄wait
。poll
總是立即返回。它有效地等待,等待時間爲0,捕獲任何異常,並且如果過程尚未完成,則返回None
。wait
或poll
,如果該進程已經完成,POPEN對象的returncode
將被設置(否則就沒有 - 你可以作爲很容易地檢查作爲調用wait
或poll
),並從函數的返回值也將是進程的返回碼。< /編輯>
所以我認爲你應該這樣做:
while myprocess.poll() is None:
print("Still working...")
# sleep a while
注意,如果在bash腳本創建大量的輸出,你必須使用communicate()
什麼類似於阻止stdout或stderr成爲塞。
@ extraneon的回答有點落後。如果過程完成,wait()
和poll()
都會返回進程的退出代碼。該poll()
方法將返回None
如果進程仍在運行和wait()
方法將阻塞,直到進程退出:
請查看以下頁面:https://docs.python.org/3.4/library/subprocess.html#popen-objects
Popen.poll()
檢查子進程終止。設置並返回returncode屬性。
Popen.wait()
等待子進程終止。設置並返回returncode屬性。
我使用的是溝通()。但是我不知道如何在進程執行時返回返回碼。 – user225312 2010-06-08 09:43:50
我解決了這個問題:if process.poll()is None:print'Working' – user225312 2010-06-08 09:47:41
這個答案是錯誤的。檢查@ onlynone的回答 – 2015-05-15 14:29:55