mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
issue7213: Open the pipes used by subprocesses with the FD_CLOEXEC flag from
the C code, using pipe2() when available. Adds unittests for close_fds and cloexec behaviors.
This commit is contained in:
parent
f560485388
commit
51ee270876
10 changed files with 195 additions and 17 deletions
24
Lib/test/subprocessdata/fd_status.py
Normal file
24
Lib/test/subprocessdata/fd_status.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
"""When called as a script, print a comma-separated list of the open
|
||||
file descriptors on stdout."""
|
||||
|
||||
import errno
|
||||
import os
|
||||
import fcntl
|
||||
|
||||
try:
|
||||
_MAXFD = os.sysconf("SC_OPEN_MAX")
|
||||
except:
|
||||
_MAXFD = 256
|
||||
|
||||
def isopen(fd):
|
||||
"""Return True if the fd is open, and False otherwise"""
|
||||
try:
|
||||
fcntl.fcntl(fd, fcntl.F_GETFD, 0)
|
||||
except IOError as e:
|
||||
if e.errno == errno.EBADF:
|
||||
return False
|
||||
raise
|
||||
return True
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(','.join(str(fd) for fd in range(0, _MAXFD) if isopen(fd)))
|
7
Lib/test/subprocessdata/input_reader.py
Normal file
7
Lib/test/subprocessdata/input_reader.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
"""When called as a script, consumes the input"""
|
||||
|
||||
import sys
|
||||
|
||||
if __name__ = "__main__":
|
||||
for line in sys.stdin:
|
||||
pass
|
7
Lib/test/subprocessdata/qcat.py
Normal file
7
Lib/test/subprocessdata/qcat.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
"""When ran as a script, simulates cat with no arguments."""
|
||||
|
||||
import sys
|
||||
|
||||
if __name__ == "__main__":
|
||||
for line in sys.stdin:
|
||||
sys.stdout.write(line)
|
10
Lib/test/subprocessdata/qgrep.py
Normal file
10
Lib/test/subprocessdata/qgrep.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
"""When called with a single argument, simulated fgrep with a single
|
||||
argument and no options."""
|
||||
|
||||
import sys
|
||||
|
||||
if __name__ == "__main__":
|
||||
pattern = sys.argv[1]
|
||||
for line in sys.stdin:
|
||||
if pattern in line:
|
||||
sys.stdout.write(line)
|
Loading…
Add table
Add a link
Reference in a new issue