diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2016-08-17 10:29:58 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2016-08-17 10:29:58 (GMT) |
commit | 7e6977a8bc5c5209d22241933b6a1d5116de4121 (patch) | |
tree | e24db2902618278444f7934f4e335d80eee213bc /Lib/test/support/script_helper.py | |
parent | 6423429325f4f2309892f530417bc9737268be38 (diff) | |
download | cpython-7e6977a8bc5c5209d22241933b6a1d5116de4121.zip cpython-7e6977a8bc5c5209d22241933b6a1d5116de4121.tar.gz cpython-7e6977a8bc5c5209d22241933b6a1d5116de4121.tar.bz2 |
script_helper: kill the subprocess on error
If Popen.communicate() raises an exception, kill the child process to not leave
a running child process in background and maybe create a zombi process.
This change fixes a ResourceWarning in Python 3.6 when unit tests are
interrupted by CTRL+c.
Diffstat (limited to 'Lib/test/support/script_helper.py')
-rw-r--r-- | Lib/test/support/script_helper.py | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/Lib/test/support/script_helper.py b/Lib/test/support/script_helper.py index c45d010..80889b1 100644 --- a/Lib/test/support/script_helper.py +++ b/Lib/test/support/script_helper.py @@ -83,16 +83,16 @@ def run_python_until_end(*args, **env_vars): env = {} env.update(env_vars) cmd_line.extend(args) - p = subprocess.Popen(cmd_line, stdin=subprocess.PIPE, + proc = subprocess.Popen(cmd_line, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - try: - out, err = p.communicate() - finally: - subprocess._cleanup() - p.stdout.close() - p.stderr.close() - rc = p.returncode + with proc: + try: + out, err = proc.communicate() + finally: + proc.kill() + subprocess._cleanup() + rc = proc.returncode err = strip_python_stderr(err) return _PythonRunResult(rc, out, err), cmd_line |