New submission from Milko Krachounov <pyt...@milko.3mhz.net>: Currently, close_fds defaults to False. The are few cases in which one would want to leave the fds open, in all the rest leaving them open can lead to unpleasant side effects. For example, the following doesn't work:
>>> p1 = Popen(['cat'], stdin=PIPE, stdout=PIPE) >>> p2 = Popen(['grep', 'a'], stdin=p1.stdout, stdout=PIPE) >>> p1.stdin.write("aaaaaaaaaaaaaaaa\n") >>> p1.stdin.close() >>> p2.stdout.read() It would block forever, and it is not obvious that p1.stdin remains open, because p2 was created without close_fds=True. On the other hand, in each and every case where close_fds=True is required, the programmer is aware that he needs to leave some fds open (and usually knows which fds). The current default is harmful, because in each case where the file descriptors are not explicitly needed in the child process, they can cause problems hard to debug. It seems that only about 10% of the current uses of Popen have close_fds=True. I propose that the close_fds default is changed to True. Alternatively, this could be combined with bug #6559 by completely removing the close_fds argument, and leaving only pass_fds, which could accept subprocess.ALL_FDS as a value. There are two issues with my proposal: 1. close_fds would have to be changed to give a warning each time it is not specified before the change of the default can be adopted. Otherwise it would break any programs relying on close_fds being False by default. 2. Closing fds has a slight performance impact. However, I think that close_fds=True is much more sensible default. I think it will be a good idea if at least py3k adopts the change. ---------- components: Library (Lib) messages: 94538 nosy: milko.krachounov severity: normal status: open title: Popen.subprocess change close_fds default to True type: behavior versions: Python 2.7, Python 3.2 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue7213> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com