Fixes issue #15798: subprocess.Popen() no longer fails if file

descriptor 0, 1 or 2 is closed. (correct fix for 3.4 this time)
This commit is contained in:
Gregory P. Smith 2013-12-01 16:03:24 -08:00
parent 5a63aa62ca
commit 53dd8167ff
3 changed files with 31 additions and 0 deletions

View file

@ -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