> >>> "mhenry1384" <[EMAIL PROTECTED]> 08/16/05 11:48 PM >>> > I am trying to run a program and filter the output on Windows XP. > Since I want to filter the output, I'd like to read it a line at a time > and only print the lines I care about. > > p = subprocess.Popen(["doxygen.exe", r"Doxyfile.cfg"], > stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
Install pywin32 . Use: read(p.stdout, SIZE) read(p.stderr, SIZE) Having defined read() as the below. The subprocess generally still needs to flush stdout and stderr. - Josiah import msvcrt import pywintypes from win32file import ReadFile from win32pipe import PeekNamedPipe def read(stdout_or_stderr, maxsize): try: x = msvcrt.get_osfhandle(stdout_or_stderr.fileno()) (read, nAvail, nMessage) = PeekNamedPipe(x, 0) if maxsize < nAvail: nAvail = maxsize if nAvail > 0: (errCode, read) = ReadFile(x, nAvail, None) except pywintypes.error, e: errno = e.args[0] if errno == 109: # other end disconnected stdout_or_stderr.close() else: raise return read -- http://mail.python.org/mailman/listinfo/python-list