summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_gdb.py
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2015-09-02 21:19:55 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2015-09-02 21:19:55 (GMT)
commit5b6b4a8c344cb70dca67109989f430733c74cfce (patch)
tree5775403674b09599c40da3b0c3559d70e1f617dd /Lib/test/test_gdb.py
parent2f3ac1ea76c5405d18ea5214ae4c795648dc47de (diff)
downloadcpython-5b6b4a8c344cb70dca67109989f430733c74cfce.zip
cpython-5b6b4a8c344cb70dca67109989f430733c74cfce.tar.gz
cpython-5b6b4a8c344cb70dca67109989f430733c74cfce.tar.bz2
test_gdb: use subprocess.Popen context manager to fix ResourceWarning warnings
when the test is interrupted (or fail).
Diffstat (limited to 'Lib/test/test_gdb.py')
-rw-r--r--Lib/test/test_gdb.py49
1 files changed, 29 insertions, 20 deletions
diff --git a/Lib/test/test_gdb.py b/Lib/test/test_gdb.py
index 9884f19..664d08c 100644
--- a/Lib/test/test_gdb.py
+++ b/Lib/test/test_gdb.py
@@ -21,26 +21,32 @@ except ImportError:
from test import support
from test.support import run_unittest, findfile, python_is_optimized
-try:
- gdb_version, _ = subprocess.Popen(["gdb", "-nx", "--version"],
- stdout=subprocess.PIPE).communicate()
-except OSError:
- # This is what "no gdb" looks like. There may, however, be other
- # errors that manifest this way too.
- raise unittest.SkipTest("Couldn't find gdb on the path")
-# Regex to parse:
-# 'GNU gdb (GDB; SUSE Linux Enterprise 12) 7.7\n' -> 7.7
-# 'GNU gdb (GDB) Fedora 7.9.1-17.fc22\n' -> 7.9
-gdb_version_number = re.search(b"^GNU gdb .*? (\d+)\.(\d)", gdb_version)
-if not gdb_version_number:
- raise Exception("unable to parse GDB version: %a" % gdb_version)
-gdb_major_version = int(gdb_version_number.group(1))
-gdb_minor_version = int(gdb_version_number.group(2))
+def get_gdb_version():
+ try:
+ proc = subprocess.Popen(["gdb", "-nx", "--version"],
+ stdout=subprocess.PIPE,
+ universal_newlines=True)
+ with proc:
+ version = proc.communicate()[0]
+ except OSError:
+ # This is what "no gdb" looks like. There may, however, be other
+ # errors that manifest this way too.
+ raise unittest.SkipTest("Couldn't find gdb on the path")
+
+ # Regex to parse:
+ # 'GNU gdb (GDB; SUSE Linux Enterprise 12) 7.7\n' -> 7.7
+ # 'GNU gdb (GDB) Fedora 7.9.1-17.fc22\n' -> 7.9
+ match = re.search("^GNU gdb .*? (\d+)\.(\d)", version)
+ if match is None:
+ raise Exception("unable to parse GDB version: %r" % version)
+ return (version, int(match.group(1)), int(match.group(2)))
+
+gdb_version, gdb_major_version, gdb_minor_version = get_gdb_version()
if gdb_major_version < 7:
raise unittest.SkipTest("gdb versions before 7.0 didn't support python "
"embedding. Saw %s.%s:\n%s"
% (gdb_major_version, gdb_minor_version,
- gdb_version.decode('ascii', 'replace')))
+ gdb_version))
if not sysconfig.is_python_build():
raise unittest.SkipTest("test_gdb only works on source builds at the moment.")
@@ -66,9 +72,12 @@ def run_gdb(*args, **env_vars):
base_cmd = ('gdb', '--batch', '-nx')
if (gdb_major_version, gdb_minor_version) >= (7, 4):
base_cmd += ('-iex', 'add-auto-load-safe-path ' + checkout_hook_path)
- out, err = subprocess.Popen(base_cmd + args,
- stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env,
- ).communicate()
+ proc = subprocess.Popen(base_cmd + args,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ env=env)
+ with proc:
+ out, err = proc.communicate()
return out.decode('utf-8', 'replace'), err.decode('utf-8', 'replace')
# Verify that "gdb" was built with the embedded python support enabled:
@@ -886,7 +895,7 @@ class PyLocalsTests(DebuggerTests):
def test_main():
if support.verbose:
print("GDB version %s.%s:" % (gdb_major_version, gdb_minor_version))
- for line in os.fsdecode(gdb_version).splitlines():
+ for line in gdb_version.splitlines():
print(" " * 4 + line)
run_unittest(PrettyPrintTests,
PyListTests,