cpython: ba8d85552e34 (original) (raw)

Mercurial > cpython

changeset 79267:ba8d85552e34 3.3

Fixes issue #15756: subprocess.poll() now properly handles errno.ECHILD to return a returncode of 0 when the child has already exited or cannot be waited on. [#15756]

Gregory P. Smith greg@krypto.org
date Sat, 29 Sep 2012 11:53:08 -0700
parents efb34b311132(current diff)484c50bf445c(diff)
children 9032b3f52819 26f06a9d17b1
files Lib/subprocess.py Misc/NEWS
diffstat 3 files changed, 22 insertions(+), 2 deletions(-)[+] [-] Lib/subprocess.py 9 Lib/test/subprocessdata/sigchild_ignore.py 11 Misc/NEWS 4

line wrap: on

line diff

--- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -1445,9 +1445,16 @@ class Popen(object): pid, sts = _waitpid(self.pid, _WNOHANG) if pid == self.pid: self._handle_exitstatus(sts)

--- a/Lib/test/subprocessdata/sigchild_ignore.py +++ b/Lib/test/subprocessdata/sigchild_ignore.py @@ -1,6 +1,15 @@ -import signal, subprocess, sys +import signal, subprocess, sys, time

On Linux this causes os.waitpid to fail with OSError as the OS has already

reaped our child process. The wait() passing the OSError on to the caller

and causing us to exit with an error is what we are testing against.

signal.signal(signal.SIGCHLD, signal.SIG_IGN) subprocess.Popen([sys.executable, '-c', 'print("albatross")']).wait() +# Also ensure poll() handles an errno.ECHILD appropriately. +p = subprocess.Popen([sys.executable, '-c', 'print("albatross")']) +num_polls = 0 +while p.poll() is None:

--- a/Misc/NEWS +++ b/Misc/NEWS @@ -13,6 +13,10 @@ Core and Builtins Library ------- +- Issue #15756: subprocess.poll() now properly handles errno.ECHILD to