Message332266
I wasn't sure how posix_spawn() handles file descriptors of standard streams with O_CLOEXEC flag set.
I wrote a test. Result: _posixsubprocess and os.posix_spawn() have the same behavior! If fd 2 (stderr) is marked with O_CLOEXEC, the fd 2 is closed in the child process, as expected. (There is no black magic to keep it open.)
$ cat x.py
import subprocess, sys, os
args = [sys.executable, 'y.py']
os.set_inheritable(2, False)
subprocess.run(args, close_fds=False, restore_signals=False)
$ cat y.py
import os
def fd_valid(fd):
try:
os.fstat(fd)
return True
except OSError:
return False
for fd in (0, 1, 2):
print("fd %s valid? %s" % (fd, fd_valid(fd)))
$ python3 x.py # unpatched
fd 0 valid? True
fd 1 valid? True
fd 2 valid? False
$ ./python x.py # patched, use posix_spawn()
fd 0 valid? True
fd 1 valid? True
fd 2 valid? False |
|
Date |
User |
Action |
Args |
2018-12-20 21:45:36 | vstinner | set | recipients:
+ vstinner, gregory.p.smith, pitrou, serhiy.storchaka, izbyshev, pablogsal, nanjekyejoannah |
2018-12-20 21:45:36 | vstinner | set | messageid: <1545342336.19.0.788709270274.issue35537@psf.upfronthosting.co.za> |
2018-12-20 21:45:36 | vstinner | link | issue35537 messages |
2018-12-20 21:45:34 | vstinner | create | |
|