cpython: 484c50bf445c (original) (raw)

Mercurial > cpython

changeset 79266:484c50bf445c 3.2

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:40:38 -0700
parents 70af6b53b52a
children ba8d85552e34 d3288f1e1025
files Lib/subprocess.py Lib/test/subprocessdata/sigchild_ignore.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 @@ -1400,9 +1400,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 @@ -123,6 +123,10 @@ Core and Builtins Library ------- +- Issue #15756: subprocess.poll() now properly handles errno.ECHILD to