From: Serhiy Storchaka Date: Mon, 10 Feb 2014 17:19:53 +0000 (+0200) Subject: issue12085: Use more Pythonic way to check _child_created. X-Git-Tag: v2.7.7rc1~186 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=306158541cde8c0b8171e45b7270bbb96a9b7562;p=python issue12085: Use more Pythonic way to check _child_created. _active shouldn't be cached, it set to None on shutdown. --- diff --git a/Lib/subprocess.py b/Lib/subprocess.py index 3108537c50..90658a1d0f 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -645,6 +645,8 @@ def list2cmdline(seq): class Popen(object): + _child_created = False # Set here since __del__ checks it + def __init__(self, args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, @@ -653,7 +655,6 @@ class Popen(object): """Create new Popen instance.""" _cleanup() - self._child_created = False if not isinstance(bufsize, (int, long)): raise TypeError("bufsize must be an integer") @@ -750,11 +751,11 @@ class Popen(object): return data - def __del__(self, _maxint=sys.maxint, _active=_active): + def __del__(self, _maxint=sys.maxint): # If __init__ hasn't had a chance to execute (e.g. if it # was passed an undeclared keyword argument), we don't # have a _child_created attribute at all. - if not getattr(self, '_child_created', False): + if not self._child_created: # We didn't get to successfully create a child process. return # In case the child hasn't been waited on, check if it's done. @@ -1330,7 +1331,7 @@ class Popen(object): _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, _WEXITSTATUS=os.WEXITSTATUS): # This method is called (indirectly) by __del__, so it cannot - # refer to anything outside of its local scope.""" + # refer to anything outside of its local scope. if _WIFSIGNALED(sts): self.returncode = -_WTERMSIG(sts) elif _WIFEXITED(sts):