From: Nick Coghlan Date: Sun, 24 Nov 2013 02:53:50 +0000 (+1000) Subject: Issue #19734: ctypes resource management fixes X-Git-Tag: v3.4.0b1~20 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1889623e1a49e38df6d10171e4a4256dfcb8916b;p=thirdparty%2FPython%2Fcpython.git Issue #19734: ctypes resource management fixes --- diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py index d2c04d21424e..0cf20766ccac 100644 --- a/Lib/ctypes/util.py +++ b/Lib/ctypes/util.py @@ -132,8 +132,10 @@ elif os.name == "posix": cmd = 'if ! type objdump >/dev/null 2>&1; then exit 10; fi;' \ "objdump -p -j .dynamic 2>/dev/null " + f f = os.popen(cmd) - dump = f.read() - rv = f.close() + try: + dump = f.read() + finally: + rv = f.close() if rv == 10: raise OSError('objdump command not found') res = re.search(r'\sSONAME\s+([^\s]+)', dump) @@ -176,10 +178,11 @@ elif os.name == "posix": else: cmd = 'env LC_ALL=C /usr/bin/crle 2>/dev/null' - for line in os.popen(cmd).readlines(): - line = line.strip() - if line.startswith('Default Library Path (ELF):'): - paths = line.split()[4] + with contextlib.closing(os.popen(cmd)) as f: + for line in f.readlines(): + line = line.strip() + if line.startswith('Default Library Path (ELF):'): + paths = line.split()[4] if not paths: return None