在某些机器上,代码为
p = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.STDOUT);
out, err = p.communicate()
此脚本将挂起p.communicate()
并且不会返回。
手动运行命令后,我终于看到了错误消息。
为什么会这样,我该如何解决?
感谢。
答案 0 :(得分:0)
尝试stderr = subprocess.PIPE
而非stderr = subprocess.STDOUT
答案 1 :(得分:0)
我猜你的程序永远不会结束?
当你调用communication()时,它会在不同的操作系统下执行不同的操作。但它始终等待已启动的进程自行退出,例如。调用p.wait()。 p.wait()仅在rocess终止时终止。
解决方案:
方式
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.__file__
找到它。