Running a command line program and reading the result as it runs

Joseph L. Casale jcasale at activenetwerx.com
Fri Aug 23 06:50:18 EDT 2013


> >> I'm using Python 2.7 under Windows and am trying to run a command line
> >> program and process the programs output as it is running. A number of
> >> web searches have indicated that the following code would work.
> >>
> >> import subprocess
> >>
> >> p = subprocess.Popen("D:\Python\Python27\Scripts\pip.exe list -o",
> >>                      stdout=subprocess.PIPE,
> >>                      stderr=subprocess.STDOUT,
> >>                      bufsize=1,
> >>                      universal_newlines=True,
> >>                      shell=False)
> >> for line in p.stdout:
> >>     print line
> >>
> >> When I use this code I can see that the Popen works, any code between
> >> the Popen and the for will run straight away, but as soon as it gets to
> >> the for and tries to read p.stdout the code blocks until the command
> >> line program completes, then all of the lines are returned.
> >>
> >> Does anyone know how to get the results of the program without it
> >> blocking?

Try this:

p = subprocess.Popen(args, stdout=subprocess.PIPE)
for line in p.stdout:
    print(line)
p.wait()

jlc



More information about the Python-list mailing list