summaryrefslogtreecommitdiffstats
path: root/Lib/subprocess.py
diff options
context:
space:
mode:
authorGregory P. Smith <greg@krypto.org>2013-12-02 00:03:24 (GMT)
committerGregory P. Smith <greg@krypto.org>2013-12-02 00:03:24 (GMT)
commit53dd8167ff548233373a75c4884ae5490b91f010 (patch)
treec779360c14ea05b47d9aca7dd68c7d3f28e0133b /Lib/subprocess.py
parent5a63aa62cad6e6cc9fbf422de54e4e0d735ec991 (diff)
downloadcpython-53dd8167ff548233373a75c4884ae5490b91f010.zip
cpython-53dd8167ff548233373a75c4884ae5490b91f010.tar.gz
cpython-53dd8167ff548233373a75c4884ae5490b91f010.tar.bz2
Fixes issue #15798: subprocess.Popen() no longer fails if file
descriptor 0, 1 or 2 is closed. (correct fix for 3.4 this time)
Diffstat (limited to 'Lib/subprocess.py')
-rw-r--r--Lib/subprocess.py7
1 files changed, 7 insertions, 0 deletions
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index 88355ad..0942d94 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -1341,6 +1341,13 @@ class Popen(object):
# Data format: "exception name:hex errno:description"
# Pickle is not used; it is complex and involves memory allocation.
errpipe_read, errpipe_write = os.pipe()
+ # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
+ low_fds_to_close = []
+ while errpipe_write < 3:
+ low_fds_to_close.append(errpipe_write)
+ errpipe_write = os.dup(errpipe_write)
+ for low_fd in low_fds_to_close:
+ os.close(low_fd)
try:
try:
# We must avoid complex work that could involve