line-by-line output from a subprocess

Chermside, Michael mchermside at ingdirect.com
Mon May 23 13:06:15 EDT 2005


I am using the subprocess module to invoke a command-line utility and
process the output.

However, I would like to process the output line-by-line as it is
generated rather than
running the subprocess to completion and THEN processing the results.
So, for instance,
I'd like to write code like this:

    all_files = []
    import subprocess
    subp = subprocess.Popen('dir', stdout=subprocess.PIPE)
    for line in subp.stdout:
        sys.stdout.print(line)
        all_files.append(line)

...and have it print the lines to stdout one-by-one until the entire
list is
collected. (Pretend that 'dir' is VERY slow.)

The communicate() method in subprocess blocks until the subprocess has
exited... I'm sure there is some good reason for this behavior. But how
does
one achieve what I am trying to do?

(PS: this is on Windows... although I'd rather use an OS-agnostic
solution if
one exists.)

-- Michael Chermside






*****************************************************************************
This email may contain confidential or privileged information. If you believe
 you have received the message in error, please notify the sender and delete 
the message without copying or disclosing it.
*****************************************************************************




More information about the Python-list mailing list