Popen.poll()和Popen.wait()之间的区别
我正在使用以下命令来运行一个shell命令(创建一个子进程):
cmd = "ls"
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
然后,我想在完成时获取它的返回码。 我应该使用wait()
或poll()
? 在我看来, wait()
等于在繁忙的等待中包含的poll()
。 就像是:
while process.poll() == None:
time.sleep(0.5)
如果stdout/stderr
缓冲区被填充,我读wait()
会产生一个死锁。 像上面那样使用process.poll()
也会产生死锁? 如果这是真的,我应该使用process.comunicate()
来解决问题? 现在,当我process.comunicate()
stdout/stderr
感兴趣时,我只使用process.comunicate()
。
提前致谢。
是。 subprocess.poll
,当在这样的循环中使用时,如果将stdout
传入进程并且您没有读取它,则会导致死锁。 如果你不stdout
或者你一直在阅读它,那么poll
和wait
都不会死锁。 subprocess.communicate
将解决它会发生的情况下的僵局。 但是,如果您只想运行一个命令,请检查其返回代码并获取其输出,并使用subprocess.check_output
来包装所有这些。
上一篇: Difference between Popen.poll() and Popen.wait()
下一篇: Whether to use Page