[Python-Dev] PEP 446: Open issues/questions (original) (raw)

Charles-François Natali cf.natali at gmail.com
Fri Aug 2 08:44:37 CEST 2013


2013/8/2 Victor Stinner <victor.stinner at gmail.com>:

On Windows, inheritable handles (including open files) are still inherited when a standard stream is overriden in the subprocess module (default value of closefds is set to False in this case). This issue cannot be solved (at least, I don't see how): it is a limitation of Windows. bInheritedHandles must be set to FALSE (inherit all inheritable handles) when handles of standard streams are specified in the startup information of CreateProcess().

Then how about changing the default to creating file descriptors unheritable on Windows (which is apparently the default)? Then you can implement keep_fds by setting them inheritable right before creation, and resetting them right after: sure there's a race in a multi-threaded program, but AFAICT that's already the case right now, and Windows API doesn't leave us any other choice. Amusingly, they address this case by recommending putting process creation in a critical section: http://support.microsoft.com/kb/315939/en-us

This way, we keep default platform behavior on Unix and on Windows (so user using low-level syscalls/APIs won't be surprised), and we have a clean way to selectively inherit FD in child processes through subprocess.

cf



More information about the Python-Dev mailing list