Issue 33079: subprocess: document the interaction between subprocess.Popen and os.set_inheritable (original) (raw)

Issue33079

Created on 2018-03-15 10:20 by sloonz, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 6240 open gregory.p.smith,2018-03-25 17:28
Messages (4)
msg313868 - (view) Author: Simon Lipp (sloonz) Date: 2018-03-15 10:20
From current `os` documentation: > A file descriptor has an “inheritable” flag which indicates if the file descriptor can be inherited by child processes from current `subprocess` documentation: > If close_fds is true, all file descriptors except 0, 1 and 2 will be closed before the child process is executed It would be helpful to explicitly specify that subprocess.Popen does not takes into account the inheritable flag ; thas is, that inheritable fds will still be closed with open_fds = False, and that non-inheritable fds will still be kept with open_fds = True.
msg314416 - (view) Author: Martin Panter (martin.panter) * (Python committer) Date: 2018-03-25 14:26
There is no “open_fds” parameter as far as I know. I presume you meant heritable descriptors are still closed with close_fds=True (not open_fds=False). Are you sure about the second part? In my experiments on Linux, unless I use “pass_fds” or one of the “stdin” etc parameters, a non-heritable descriptor is never passed to the child, no matter what I use for “close_fds”. Reading through Issue 6559, the intention of “pass_fds” seems to be to list extra file descriptors, in addition to 0, 1 and 2 that are normally passed. The documentation says descriptors greater than 2 are closed (due to close_fds=True), but in reality the “pass_fds” descriptors seem to be always left open, even when they are marked non-heritable.
msg314422 - (view) Author: Gregory P. Smith (gregory.p.smith) * (Python committer) Date: 2018-03-25 17:37
I assumed simon meant "close_fds=False" when he wrote open_fds = True. Regardless, supplying any pass_fds forces close_fds=True behavior. File descriptors listed in pass_fds are explicitly set inheritable from within the child process prior to calling exec(). See the start of child_exec() within Modules/_posixsubprocess.c.
msg314423 - (view) Author: Gregory P. Smith (gregory.p.smith) * (Python committer) Date: 2018-03-25 17:44
I clarified the docs to mention that the inheritable flag is heeded when close_fds=False in https://github.com/python/cpython/pull/6240/files
History
Date User Action Args
2022-04-11 14:58:58 admin set github: 77260
2018-03-25 17:44:07 gregory.p.smith set status: open -> closedresolution: fixedmessages: + stage: patch review -> resolved
2018-03-25 17:37:50 gregory.p.smith set messages: +
2018-03-25 17:28:01 gregory.p.smith set keywords: + patchstage: patch reviewpull_requests: + <pull%5Frequest5976>
2018-03-25 14:26:27 martin.panter set nosy: + martin.pantermessages: +
2018-03-16 02🔞16 ned.deily set nosy: + gregory.p.smith
2018-03-15 10:20:38 sloonz create