2013/8/2 Victor Stinner <victor.stin...@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 close_fds 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 _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com