"""When called as a script, print a comma-separated list of the open
-file descriptors on stdout."""
+file descriptors on stdout.
+
+Usage:
+fd_stats.py: check all file descriptors
+fd_status.py fd1 fd2 ...: check only specified file descriptors
+"""
import errno
import os
import stat
-
-try:
- _MAXFD = os.sysconf("SC_OPEN_MAX")
-except:
- _MAXFD = 256
+import sys
if __name__ == "__main__":
fds = []
- for fd in range(0, _MAXFD):
+ if len(sys.argv) == 1:
+ try:
+ _MAXFD = os.sysconf("SC_OPEN_MAX")
+ except:
+ _MAXFD = 256
+ test_fds = range(0, _MAXFD)
+ else:
+ test_fds = map(int, sys.argv[1:])
+ for fd in test_fds:
try:
st = os.fstat(fd)
except OSError as e:
+++ /dev/null
-"""Similar to fd_status.py, but only checks file descriptors passed on the
-command line."""
-
-import errno
-import os
-import sys
-import stat
-
-if __name__ == "__main__":
- fds = map(int, sys.argv[1:])
- inherited = []
- for fd in fds:
- try:
- st = os.fstat(fd)
- except OSError as e:
- if e.errno == errno.EBADF:
- continue
- raise
- # Ignore Solaris door files
- if not stat.S_ISDOOR(st.st_mode):
- inherited.append(fd)
- print(','.join(map(str, inherited)))
self.assertIn('overriding close_fds', str(context.warning))
def test_pass_fds_inheritable(self):
- script = support.findfile("inherited.py", subdir="subprocessdata")
+ script = support.findfile("fd_status.py", subdir="subprocessdata")
inheritable, non_inheritable = os.pipe()
self.addCleanup(os.close, inheritable)
# the inheritable file descriptor must be inherited, so its inheritable
# flag must be set in the child process after fork() and before exec()
- self.assertEqual(fds, set(pass_fds))
+ self.assertEqual(fds, set(pass_fds), "output=%a" % output)
# inheritable flag must not be changed in the parent process
self.assertEqual(os.get_inheritable(inheritable), True)