pty.spawn directs stderr to stdout

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Wilbert Berendsen

    pty.spawn directs stderr to stdout

    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

    --

    "You must be the change you wish to see in the world."
    -- Mahatma Gandhi
  • Donn Cave

    #2
    Re: pty.spawn directs stderr to stdout

    In article <mailman.262.12 07895473.17997. python-list@python.org >,
    Wilbert Berendsen <wbsoft@xs4all. nlwrote:
    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@u.washingt on.edu

    Comment

    • Donn Cave

      #3
      Re: pty.spawn directs stderr to stdout

      In article <mailman.262.12 07895473.17997. python-list@python.org >,
      Wilbert Berendsen <wbsoft@xs4all. nlwrote:
      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@u.washingt on.edu

      Comment

      • Wilbert Berendsen

        #4
        Re: pty.spawn directs stderr to stdout

        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.Pope n with pty.openpty ...

        tx,
        Wilbert Berendsen

        --

        "You must be the change you wish to see in the world."
        -- Mahatma Gandhi

        Comment

        • Wilbert Berendsen

          #5
          Re: pty.spawn directs stderr to stdout

          Op zaterdag 12 april 2008, schreef Wilbert Berendsen:
          I'm currently trying to combine subprocess.Pope n with pty.openpty ...
          which succeeded :-)

          it seems to work :-)
          thanks,
          Wilbert Berendsen

          --

          "You must be the change you wish to see in the world."
          -- Mahatma Gandhi

          Comment

          Working...