我用Python中的subprocess.Popen啓動了一些子進程。 我想檢查一個這樣的過程是否完成。我發現了兩種檢查子進程狀態的方法,但都似乎迫使進程完成。 一個使用process.communicate()並打印返回碼,如解釋here。 另一種方法是簡單地調用process.wait()並檢查它是否返回0.有沒有辦法檢查子進程是否仍在運行?
有沒有一種方法可以檢查進程是否仍在運行,而無需等待進程完成?
我用Python中的subprocess.Popen啓動了一些子進程。 我想檢查一個這樣的過程是否完成。我發現了兩種檢查子進程狀態的方法,但都似乎迫使進程完成。 一個使用process.communicate()並打印返回碼,如解釋here。 另一種方法是簡單地調用process.wait()並檢查它是否返回0.有沒有辦法檢查子進程是否仍在運行?
有沒有一種方法可以檢查進程是否仍在運行,而無需等待進程完成?
Ouestion: ... a way to check if a process is still running ...
例如你可以做到這一點:
p = subprocess.Popen(...
"""
A None value indicates that the process hasn't terminated yet.
"""
poll = p.poll()
if poll == None:
# p.subprocess is alive
Python » 3.6.1 Documentation popen-objects
測試使用Python 3.4.2
這給出了「AttributeError:'Popen'對象沒有屬性'進程'」 – ahura
我可以做p.poll ()。即使完成該過程,它也會返回None。我知道這是因爲我調用的腳本產生了一個輸出文件,它仍然會返回None。 另外,我可以打印給出0的p.wait(),但打印後面的p.poll()仍然給出None。 – ahura
語義,但我相信'如果輪詢是無'是寫它的首選方式。 – asongtoruin
您可以使用subprocess.check_output來查看您的輸出。
試試這個代碼:
import subprocess
subprocess.check_output(['your command here'], shell=True, stderr=subprocess.STDOUT)
希望這有助於!
做好
myProcessIsRunning = poll() is None
正如主要答案中所建議的那樣,是推薦的方法和最簡單的方法來檢查一個進程是否正在運行。 (並且它也以jython的方式工作)
如果您沒有手動檢查它的流程實例。 然後使用操作系統TaskList/Ps進程。
在Windows上,我的命令如下所示:
filterByPid = "PID eq %s" % pid
pidStr = str(pid)
commandArguments = ['cmd', '/c', "tasklist", "/FI", filterByPid, "|", "findstr", pidStr ]
這實質上是在做同樣的事情,以下命令行:
cmd /c "tasklist /FI "PID eq 55588" | findstr 55588"
在Linux上,我做同樣的使用:
pidStr = str(pid)
commandArguments = ['ps', '-p', pidStr ]
ps命令將已經返回了錯誤代碼0/1,具體取決於Ò n是否找到過程。在Windows上,您需要find字符串命令。
這是該followig堆棧溢出線程上討論相同的方法:
Verify if a process is running using its PID in JAVA
注: 如果使用這種方法,remeber來包裝你的命令調用在
嘗試: foundRunningProcess =子進程。check_output(argumentsArray,** kwargs) 返回true 除了異常的錯誤: 返回False
請注意,如果您正在使用VS代碼開發和使用純Python和Jython小心。 在我的環境中,我擔心poll()方法不起作用,因爲我懷疑這個過程肯定已經結束了,確實正在運行。 這個過程已經推出了Wild。。在我要求野蠅停止後,殼仍在等待用戶「按任意鍵繼續......」。
爲了玩完這個過程中,在純Python下面的代碼是工作:
process.stdin.write(os.linesep)
在Jython中,我必須解決這個問題的代碼如下所示:
print >>process.stdin, os.linesep
而且有了這種差異,這個過程確實完成了。 jython.poll()開始告訴我這個過程確實完成了。
['Popen.poll()'](https://docs.python.org/2/library/subprocess.html#subprocess.Popen.poll)? – asongtoruin
@asongtoruin打印無,即使過程完成。 – ahura
過程完成後應停止打印'無'。你如何調用你的子進程? – asongtoruin