stdout not flushed before os.execvp()

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Thomas Guettler

    #1

    stdout not flushed before os.execvp()

    Hi,

    I noticed, that sys.stout does not get flushed before the process is
    replaced. The last print statements (before execvp()) disappear.

    It only happens, if the output is redirected to a file (if sys.stdout is
    not line buffered).

    """#testexe c.py
    import os
    print "Messsage"
    os.execvp("/bin/true", ["/bin/true"])
    """

    ===python tmp/testexec.py
    Messsage

    ===python tmp/testexec.py out ; cat out


    Is this a bug or feature?

    My version:
    Python 2.4.2 (#1, May 2 2006, 08:28:01)
    GCC 4.1.0 (SUSE Linux)] on linux2


    --
    Thomas Güttler, http://www.thomas-guettler.de/ http://www.tbz-pariv.de/
    E-Mail: guettli (*) thomas-guettler + de
    Spam Catcher: niemand.leerman n@thomas-guettler.de

  • Fredrik Lundh

    #2
    Re: stdout not flushed before os.execvp()

    Thomas Guettler wrote:
    Is this a bug or feature?
    feature. the "exec" system call operates on a lower level than the
    stdio buffering system.

    </F>

    Comment

    • dakman@gmail.com

      #3
      Re: stdout not flushed before os.execvp()

      If you wanted to make sure stdio was flushed you could always do...

      sys.stdout.writ e("Message\n" )
      sys.stdout.flus h()

      Thomas Guettler wrote:
      Hi,
      >
      I noticed, that sys.stout does not get flushed before the process is
      replaced. The last print statements (before execvp()) disappear.
      >
      It only happens, if the output is redirected to a file (if sys.stdout is
      not line buffered).
      >
      """#testexe c.py
      import os
      print "Messsage"
      os.execvp("/bin/true", ["/bin/true"])
      """
      >
      ===python tmp/testexec.py
      Messsage
      >
      ===python tmp/testexec.py out ; cat out
      >
      >
      Is this a bug or feature?
      >
      My version:
      Python 2.4.2 (#1, May 2 2006, 08:28:01)
      GCC 4.1.0 (SUSE Linux)] on linux2
      >
      >
      --
      Thomas Güttler, http://www.thomas-guettler.de/ http://www.tbz-pariv.de/
      E-Mail: guettli (*) thomas-guettler + de
      Spam Catcher: niemand.leerman n@thomas-guettler.de

      Comment

      • Fulvio

        #4
        Re: stdout not flushed before os.execvp()

        On Wednesday 18 October 2006 00:25, Fredrik Lundh wrote:
        |feature. the "exec" system call operates on a lower level than the
        |stdio buffering system.
        I did in this manner:

        for exe in ('imap4', 'pop3'):
        if exe in cfgfil[optsrv + '.protocol']:
        exe = exe[:4]; exe = 'call_func = _call_' + exe.upper() \
        + '(setting)'
        try:
        exec exe
        except ProtocolError:
        call_func = '#ERROR 02 = Protocol failed with %s' %optsrv
        break

        exists it a different way to do it?

        F

        Comment

        Working...