mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Fixes issue #15798: subprocess.Popen() no longer fails if file
descriptor 0, 1 or 2 is closed. The errpipe_write fd will always be >= 3.
This commit is contained in:
parent
5c1c3b4f19
commit
708a3182c9
3 changed files with 66 additions and 6 deletions
|
@ -1559,6 +1559,27 @@ class POSIXProcessTestCase(BaseTestCase):
|
|||
# all standard fds closed.
|
||||
self.check_close_std_fds([0, 1, 2])
|
||||
|
||||
def test_small_errpipe_write_fd(self):
|
||||
"""Issue #15798: Popen should work when stdio fds are available."""
|
||||
new_stdin = os.dup(0)
|
||||
new_stdout = os.dup(1)
|
||||
try:
|
||||
os.close(0)
|
||||
os.close(1)
|
||||
|
||||
# Side test: if errpipe_write fails to have its CLOEXEC
|
||||
# flag set this should cause the parent to think the exec
|
||||
# failed. Extremely unlikely: everyone supports CLOEXEC.
|
||||
subprocess.Popen([
|
||||
sys.executable, "-c",
|
||||
"print('AssertionError:0:CLOEXEC failure.')"]).wait()
|
||||
finally:
|
||||
# Restore original stdin and stdout
|
||||
os.dup2(new_stdin, 0)
|
||||
os.dup2(new_stdout, 1)
|
||||
os.close(new_stdin)
|
||||
os.close(new_stdout)
|
||||
|
||||
def test_remapping_std_fds(self):
|
||||
# open up some temporary files
|
||||
temps = [mkstemp() for i in range(3)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue