Difference between Popen.poll() and Popen.wait()

I'm using the following command to run a shell command (creating a subprocess):

cmd = "ls"
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)

Then, I want to get its return code when it's finished. I should use wait() or poll() ? It seems to me wait() is equal to a poll() enclosed in a busy wait. Something like:

while process.poll() == None:
    time.sleep(0.5)

I read that wait() could generate a deadlock if stdout/stderr buffer is filled. process.poll() used like above also could generate a deadlock? If this is true, I should use process.comunicate() to solve the problem? Nowadays, I only use process.comunicate() when I'm interested in the subprocess stdout/stderr .

Thanks in advance.


Yes. subprocess.poll , when used in a loop like that, will cause a deadlock if the stdout is piped into your process and you aren't reading from it. If you don't pipe stdout or you're consistently reading from it, neither poll nor wait will deadlock. subprocess.communicate will solve the deadlock in the cases it would occur. However, if you just want to run a command, check its return code, and get its output, use subprocess.check_output , which wraps all of that.

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

上一篇: 如何停止.htaccess循环

下一篇: Popen.poll()和Popen.wait()之间的区别