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或者你一直在阅读它,那么pollwait都不会死锁。 subprocess.communicate将解决它会发生的情况下的僵局。 但是,如果您只想运行一个命令,请检查其返回代码并获取其输出,并使用subprocess.check_output来包装所有这些。

链接地址: http://www.djcxy.com/p/67219.html

上一篇: Difference between Popen.poll() and Popen.wait()

下一篇: Whether to use Page