[英]Python subprocess.call thread hang, subprocess.popen no hang
[英]Python: subprocess.Popen and subprocess.call hang
我使用subprocess.Popen或subprocess.call時遇到問題,當我使用subprocess.Popen或subprocess.call執行生成大量輸出的命令行時,python腳本會掛起,但是等待一段時間之后,當腳本處於運行狀態時有什么奇怪的它的掛起狀態,我發現cmd行命令的工作已經完成,只有腳本被掛出。
subprocess.call(cmd, shell = True)
#OR
subprocess.Popen(cmd, stdout = subprocess.PIPE, stdin = subprocess.PIPE, shell = True)
# HANGS HERE
print "show something after subprocess"
請注意,最后一次打印永遠不會執行,但實際上已經執行了cmd。
另請注意,cmd與串行端口有關,因此當我插入串行電纜時,一切都會變好,最后一次打印狀態就會被執行。 但是當我使用終端時,即使插入了串口,一切都很好,它只發生在python腳本中。
非常感謝
根據Python文檔, subprocess.call
運行命令,並等待其完成,所以它相當於subprocess.Popen
隨后Popen.wait
。
但是, Popen.wait
方法文檔明確警告緩沖區溢出問題,並建議使用Popen.communicate
。 因此,您正在尋找的解決方案應該是這樣的:
import subprocess
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
stdout, stderr = process.communicate()
print "show something after subprocess"
我不明白為什么你的第一行不起作用 - 因為沒有stdin
/ stdout
/ stderr
重定向,所以不需要阻塞。
第二個應該阻止進程
但是,當您的子進程正確終止時,我也看不到阻塞的原因。 你確定它真的終止了嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.