[EMAIL PROTECTED] wrote: > On UNIX one can use popen* to get a pipe for reading, a pipe for > writing, and the exit code of the child process via a call to close() > on the last pipe. Is there any way, in principle, to simulate such > behaviour on Windows? Some googling reveals that direct use of the > popen* functions on Windows will not do the trick, but are there > indirect ways?
This is well-tested: def launch(cmd, split_lines=True): """Launch a sub-process. Return its output (both stdout and stderr), optionally split by lines (if split_lines is True). Raise a LaunchError exception if the exit code of the process is non-zero (failure).""" if os.name not in ['nt', 'os2']: p = popen2.Popen4(cmd) p.tochild.close() if split_lines: out = p.fromchild.readlines() else: out = p.fromchild.read() ret = p.wait() if ret == 0: ret = None else: ret >>= 8 else: i,k = os.popen4(cmd) i.close() if split_lines: out = k.readlines() else: out = k.read() ret = k.close() if ret is None: return out raise LaunchError(ret, cmd, out) -- Giovanni Bajo -- http://mail.python.org/mailman/listinfo/python-list