On Mon, 29 Jul 2013 23:42:36 +0200 Victor Stinner <victor.stinner at gmail.com> wrote: > > >> So perhaps only the *original* standard streams should be left > >> inheritable? > > I plan to only change functions *creating* (and replacing) new file > descriptors. Existing file descriptors (like 0, 1, 2) are unchanged. You can create fds 0, 1 and 2 if they were closed before. > > Having stdin/stdout/stderr cloexec (e.g. after a dup() to redirect to > > a log file, a socket...) will likely break a lot of code, e.g. code > > using os.system(), or code calling exec manually (and I'm sure there's > > a bunch of it). > > I propose to add just one special case os.dup2(fd, fd2): if fd2 < 3, > fd2 is set to inheritable (otherwise, fd2 is set to non-inheritable). > os.dup2() is commonly used to replace stdin, stdout and stderr between > fork and exec. The http.server (cgi server) and pty modules use dup2() > for example Mmh. Doing it only in dup2() sounds like too much special casing for me. I would prefer adding a new explicit parameter: os.dup2(fd, fd2, inheritable=False) (as a bonus, it can be implemented using dup3() under (GNU/)Linux) Regards Antoine.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4