gpt4 book ai didi

Python:subprocess.Popen 和 subprocess.call 挂起

转载 作者:太空狗 更新时间:2023-10-29 16:56:40 29 4
gpt4 key购买 nike

当我使用 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。等待

但是,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"

关于Python:subprocess.Popen 和 subprocess.call 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8077868/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com