Quantcast

pty.spawn directs stderr to stdout

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

pty.spawn directs stderr to stdout

Wilbert Berendsen-6
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?

TIA,
w best regards,
Wilbert Berendsen

--
http://www.wilbertberendsen.nl/
"You must be the change you wish to see in the world."
        -- Mahatma Gandhi
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: pty.spawn directs stderr to stdout

Donn Cave
In article <[hidden email]>,
 Wilbert Berendsen <[hidden email]> 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, [hidden email]
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: pty.spawn directs stderr to stdout

Wilbert Berendsen-6
Op vrijdag 11 april 2008, schreef Donn Cave:
> More likely, you want the spawned process' error output to go wherever
> the parent's error output was going.  This is a little trickier.

I ended up writing a small script that basically reimplements fork() from the
pty module, where then STDERR is not dup'ed to the pty.

I'm currently trying to combine subprocess.Popen with pty.openpty ...

tx,
Wilbert Berendsen

--
http://www.wilbertberendsen.nl/
"You must be the change you wish to see in the world."
        -- Mahatma Gandhi
--
http://mail.python.org/mailman/listinfo/python-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: pty.spawn directs stderr to stdout

Wilbert Berendsen-6
Op zaterdag 12 april 2008, schreef Wilbert Berendsen:
> I'm currently trying to combine subprocess.Popen with pty.openpty ...

which succeeded :-)
http://code.google.com/p/lilykde/source/browse/trunk/runpty.py?r=314
it seems to work :-)
thanks,
Wilbert Berendsen

--
http://www.wilbertberendsen.nl/
"You must be the change you wish to see in the world."
        -- Mahatma Gandhi
--
http://mail.python.org/mailman/listinfo/python-list
Loading...