mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Issue #7213: Change the close_fds default on Windows to better match the new default on POSIX. True when possible (False if stdin/stdout/stderr are supplied). Update the documentation to reflect all of the above.
This commit is contained in:
parent
39f34aa1f3
commit
8edd99d085
5 changed files with 79 additions and 27 deletions
|
@ -1042,6 +1042,37 @@ class POSIXProcessTestCase(BaseTestCase):
|
|||
"Some fds were left open")
|
||||
self.assertIn(1, remaining_fds, "Subprocess failed")
|
||||
|
||||
def test_pass_fds(self):
|
||||
fd_status = support.findfile("fd_status.py", subdir="subprocessdata")
|
||||
|
||||
open_fds = set()
|
||||
|
||||
for x in range(5):
|
||||
fds = os.pipe()
|
||||
self.addCleanup(os.close, fds[0])
|
||||
self.addCleanup(os.close, fds[1])
|
||||
open_fds.update(fds)
|
||||
|
||||
for fd in open_fds:
|
||||
p = subprocess.Popen([sys.executable, fd_status],
|
||||
stdout=subprocess.PIPE, close_fds=True,
|
||||
pass_fds=(fd, ))
|
||||
output, ignored = p.communicate()
|
||||
|
||||
remaining_fds = set(map(int, output.split(b',')))
|
||||
to_be_closed = open_fds - {fd}
|
||||
|
||||
self.assertIn(fd, remaining_fds, "fd to be passed not passed")
|
||||
self.assertFalse(remaining_fds & to_be_closed,
|
||||
"fd to be closed passed")
|
||||
|
||||
# pass_fds overrides close_fds with a warning.
|
||||
with self.assertWarns(RuntimeWarning) as context:
|
||||
self.assertFalse(subprocess.call(
|
||||
[sys.executable, "-c", "import sys; sys.exit(0)"],
|
||||
close_fds=False, pass_fds=(fd, )))
|
||||
self.assertIn('overriding close_fds', str(context.warning))
|
||||
|
||||
|
||||
@unittest.skipUnless(mswindows, "Windows specific tests")
|
||||
class Win32ProcessTestCase(BaseTestCase):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue