pty.spawn directs stderr to stdout

Donn Cave donn at u.washington.edu
Fri Apr 11 16:02:39 EDT 2008


In article <mailman.262.1207895473.17997.python-list at python.org>,
 Wilbert Berendsen <wbsoft at xs4all.nl> wrote:

> Hi,
> 
> using pty.spawn() it seems that stderr output of the spawned process is 
> directed to stdout. Is there a way to keep stderr separate and only direct 
> stdin and stdout to the pty?

There is, of course.

First, you have to decide where you want unit 2 ("stderr") to go, and
then get the spawned process to redirect it there.  If a disk file
will do, then your question is just "how do I redirect error output
to a disk file, in ___" (fill in the blank with language used to
implement the spawned process - UNIX shell?  Python?  C?)

More likely, you want the spawned process' error output to go wherever
the parent's error output was going.  This is a little trickier.

Ideally, your spawned shell script can conveniently take a new
parameter that identifies the new file descriptor unit number for
error output.  In this case, use fd2 = os.dup(2) to get a new
duplicate, add a parameter like -e str(fd2), and in the spawned
process, redirect from that unit - in UNIX shell,  exec 2>&$fd2

Or you could use an environment variable to identify the backup
error unit, if the command line parameter option isn't available
for some reason.

   Donn Cave, donn at u.washington.edu



More information about the Python-list mailing list