summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2016-08-17 10:29:58 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2016-08-17 10:29:58 (GMT)
commit7e6977a8bc5c5209d22241933b6a1d5116de4121 (patch)
treee24db2902618278444f7934f4e335d80eee213bc
parent6423429325f4f2309892f530417bc9737268be38 (diff)
downloadcpython-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.
-rw-r--r--Lib/test/support/script_helper.py16
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