--- py3k/Lib/subprocess.py 2010-12-10 20:09:56.000000000 +0200 +++ py3k-subprocess/Lib/subprocess.py 2010-12-10 20:35:13.000000000 +0200 @@ -609,7 +609,7 @@ cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, - pass_fds=()): + pass_fds=(), pipes_cloexec=True): """Create new Popen instance.""" _cleanup() @@ -675,7 +675,7 @@ errread, errwrite) = self._get_handles(stdin, stdout, stderr) self._execute_child(args, executable, preexec_fn, close_fds, - pass_fds, cwd, env, universal_newlines, + pass_fds, pipes_cloexec, cwd, env, universal_newlines, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, @@ -852,7 +852,7 @@ def _execute_child(self, args, executable, preexec_fn, close_fds, - pass_fds, cwd, env, universal_newlines, + pass_fds, pipes_cloexec, cwd, env, universal_newlines, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, @@ -1093,7 +1093,7 @@ def _execute_child(self, args, executable, preexec_fn, close_fds, - pass_fds, cwd, env, universal_newlines, + pass_fds, pipes_cloexec, cwd, env, universal_newlines, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, @@ -1262,10 +1262,16 @@ os.close(errpipe_write) if p2cread != -1 and p2cwrite != -1: + if pipes_cloexec: + self._set_cloexec_flag(p2cwrite) os.close(p2cread) if c2pwrite != -1 and c2pread != -1: + if pipes_cloexec: + self._set_cloexec_flag(c2pread) os.close(c2pwrite) if errwrite != -1 and errread != -1: + if pipes_cloexec: + self._set_cloexec_flag(errread) os.close(errwrite) # Wait for exec to fail or succeed; possibly raising an