我在使用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脚本才会出现这种情况。
非常感谢
发布于 2011-11-10 19:29:38
根据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"发布于 2011-11-10 21:42:19
我不明白为什么你的第一行不能工作--因为没有stdin/stdout/stderr重定向,所以不需要阻塞。
第二个进程应该阻塞,如果进程
但是当你的子进程正确终止时,我看不到阻塞的原因。你确定它真的会终止吗?
https://stackoverflow.com/questions/8077868
复制相似问题