在某些机器上,对于以下代码
p = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.STDOUT);
out, err = p.communicate()
该脚本只会挂起p.communicate()
并且不会返回。
在我手动运行命令后,我终于看到了错误消息。
为什么会这样,我应该如何解决?
谢谢。
在某些机器上,对于以下代码
p = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.STDOUT);
out, err = p.communicate()
该脚本只会挂起p.communicate()
并且不会返回。
在我手动运行命令后,我终于看到了错误消息。
为什么会这样,我应该如何解决?
谢谢。
尽量stderr = subprocess.PIPE
不要stderr = subprocess.STDOUT
我猜你的程序永远不会结束?
当您调用communicate() 时,它在不同的操作系统下做不同的事情。但它总是等待启动的进程自行退出,例如。调用 p.wait()。p.wait() 仅在进程终止时终止。
解决方案:
方式
def main():
## here is you program code
if __name__ == '__main__':
import thread, sys, time
_id = thread.start_new(main, ())
time.sleep(1)
t = time.time() + 100 # execute maximum 100 + 1 seconds
while t > time.time() and _id in sys._current_frames():
time.sleep(0.001)
如果您想查看 subprocess 的来源,您可以在subprocess.__file__
.