Iterating through 2 files simultaneously

Rob Williscroft rtw at freenet.co.uk
Sun Jul 27 09:10:46 EDT 2008


 wrote in news:7ae96aff-c1a7-4763-8db7-
ff23766296df at u6g2000prc.googlegroups.com in comp.lang.python:

> Hi folks,
> 
> I am trying to tee off both stdout and stderr from a process run
> through Popen.
> As a test, I am first trying to print the output below:
> 
> from subprocess import Popen,PIPE
> ...
> p1 = Popen(['cvs', 'update'], stdout=PIPE, stderr=PIPE)
> for (l1, l2) in zip(p1.stdout, p1.stderr):
>     print '-->' + l1,
>     print '-->' + l2,
> 
> This doesn't work - probably because I cannot iterate through the
> pipes this way.
> 
> I am new to Python, and I'd appreciate it if you could please explain
> why this
> doesn't work and/or suggest an alternate way to redirect stdout and
> stderr to a
> common place.
> 
> My objective is for my code to print out stdout/stderr messages and at
> the same
> time redirect them to a log file.

>From the manual <url: http://docs.python.org/lib/node528.html>:

stdin, stdout and stderr specify ... 
... Additionally, stderr can be STDOUT, which indicates that the stderr 
data from the applications should be captured into the same file handle 
as for stdout. 

So import STDOUT and make stderr=STDOUT in the Popen call, you will then
have one file/pipe to deal with p1.stdout.

Rob.
-- 
http://www.victim-prime.dsl.pipex.com/



More information about the Python-list mailing list