diff options
author | Gregory P. Smith <greg@krypto.org> | 2013-12-02 00:03:24 (GMT) |
---|---|---|
committer | Gregory P. Smith <greg@krypto.org> | 2013-12-02 00:03:24 (GMT) |
commit | 53dd8167ff548233373a75c4884ae5490b91f010 (patch) | |
tree | c779360c14ea05b47d9aca7dd68c7d3f28e0133b /Lib/subprocess.py | |
parent | 5a63aa62cad6e6cc9fbf422de54e4e0d735ec991 (diff) | |
download | cpython-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.py | 7 |
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 |