Index: Lib/popen2.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/popen2.py,v retrieving revision 1.26 diff -c -r1.26 popen2.py *** Lib/popen2.py 2 Jun 2003 19:12:01 -0000 1.26 --- Lib/popen2.py 29 Jun 2003 03:07:22 -0000 *************** *** 19,24 **** --- 19,31 ---- for inst in _active[:]: inst.poll() + def _cleanup_fds(fdlist): + for fd in fdlist: + try: + os.close(fd) + except OSError: + pass + class Popen3: """Class representing a child process. Normally instances are created by the factory functions popen2() and popen3().""" *************** *** 36,59 **** c2pread, c2pwrite = os.pipe() if capturestderr: errout, errin = os.pipe() ! self.pid = os.fork() ! if self.pid == 0: ! # Child ! os.dup2(p2cread, 0) ! os.dup2(c2pwrite, 1) if capturestderr: ! os.dup2(errin, 2) ! self._run_child(cmd) ! os.close(p2cread) ! self.tochild = os.fdopen(p2cwrite, 'w', bufsize) ! os.close(c2pwrite) ! self.fromchild = os.fdopen(c2pread, 'r', bufsize) ! if capturestderr: ! os.close(errin) ! self.childerr = os.fdopen(errout, 'r', bufsize) ! else: ! self.childerr = None ! _active.append(self) def _run_child(self, cmd): if isinstance(cmd, basestring): --- 43,73 ---- c2pread, c2pwrite = os.pipe() if capturestderr: errout, errin = os.pipe() ! try: ! self.pid = os.fork() ! if self.pid == 0: ! # Child ! os.dup2(p2cread, 0) ! os.dup2(c2pwrite, 1) ! if capturestderr: ! os.dup2(errin, 2) ! self._run_child(cmd) ! os.close(p2cread) ! self.tochild = os.fdopen(p2cwrite, 'w', bufsize) ! os.close(c2pwrite) ! self.fromchild = os.fdopen(c2pread, 'r', bufsize) if capturestderr: ! os.close(errin) ! self.childerr = os.fdopen(errout, 'r', bufsize) ! else: ! self.childerr = None ! _active.append(self) ! except: ! fdlist = [p2cread, p2cwrite, c2pread, c2pwrite] ! if capturestderr: ! fdlist += [errout, errin] ! _cleanup_fds(fdlist) ! raise def _run_child(self, cmd): if isinstance(cmd, basestring): *************** *** 98,115 **** _cleanup() p2cread, p2cwrite = os.pipe() c2pread, c2pwrite = os.pipe() ! self.pid = os.fork() ! if self.pid == 0: ! # Child ! os.dup2(p2cread, 0) ! os.dup2(c2pwrite, 1) ! os.dup2(c2pwrite, 2) ! self._run_child(cmd) ! os.close(p2cread) ! self.tochild = os.fdopen(p2cwrite, 'w', bufsize) ! os.close(c2pwrite) ! self.fromchild = os.fdopen(c2pread, 'r', bufsize) ! _active.append(self) if sys.platform[:3] == "win" or sys.platform == "os2emx": --- 112,133 ---- _cleanup() p2cread, p2cwrite = os.pipe() c2pread, c2pwrite = os.pipe() ! try: ! self.pid = os.fork() ! if self.pid == 0: ! # Child ! os.dup2(p2cread, 0) ! os.dup2(c2pwrite, 1) ! os.dup2(c2pwrite, 2) ! self._run_child(cmd) ! os.close(p2cread) ! self.tochild = os.fdopen(p2cwrite, 'w', bufsize) ! os.close(c2pwrite) ! self.fromchild = os.fdopen(c2pread, 'r', bufsize) ! _active.append(self) ! except: ! _cleanup_fds([p2cread, p2cwrite, c2pread, c2pwrite]) ! raise if sys.platform[:3] == "win" or sys.platform == "os2emx":