簡體   English   中英

Python:subprocess.Popen和subprocess.call掛起

[英]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重定向,所以不需要阻塞。

第二個應該阻止進程

  1. 期望數據通過stdin或
  2. 向stdout發送的數據多於管道可以保存的數據。

但是,當您的子進程正確終止時,我也看不到阻塞的原因。 你確定它真的終止了嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM