我使用subprocess.Popen或subprocess.call执行生成大量输出命令行时,Python脚本会停顿。奇怪的是,在等待一段时间后,当脚本处于挂起状态时,我发现被cmd line命令调用的任务已经完成,只有脚本被卡住了。
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脚本中。
非常感谢。
subprocess.PIPE
,那么使用subprocess.call
没有任何问题,而OP并没有使用它。 - interjayprint
语句的输出不显示在父进程中。即使子进程被阻塞在尝试写入具有完整缓冲区的管道时,Popen()
也不会等待子进程。 - jfsreturncode
,在上述情况下可以通过process.returncode
访问它。与wait()
不同的是,它不会作为communicate()
的返回值返回,而是返回一个元组(stdout, stderr)。 - Shailesh Appukuttan