Close #12114: fix a potential deadlock in packaging.util._find_exe_version()
Avoid also zombi processes: Popen.communicate() calls its wait() method.
diff --git a/Lib/packaging/tests/test_util.py b/Lib/packaging/tests/test_util.py
index 4beab0f..53f6a56 100644
--- a/Lib/packaging/tests/test_util.py
+++ b/Lib/packaging/tests/test_util.py
@@ -74,6 +74,9 @@
self.stdout = StringIO(exes[self.cmd])
self.stderr = StringIO()
+ def communicate(self, input=None, timeout=None):
+ return self.stdout.read(), self.stderr.read()
+
class UtilTestCase(support.EnvironRestorer,
support.TempdirManager,
diff --git a/Lib/packaging/util.py b/Lib/packaging/util.py
index 71ce819..bf31c31 100644
--- a/Lib/packaging/util.py
+++ b/Lib/packaging/util.py
@@ -464,7 +464,7 @@
return None
pipe = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
try:
- stdout, stderr = pipe.stdout.read(), pipe.stderr.read()
+ stdout, stderr = pipe.communicate()
finally:
pipe.stdout.close()
pipe.stderr.close()