closing stdin, stdout and stderr

Discussion in 'Python' started by Martijn Brouwer, Dec 26, 2005.

  1. I am writing a unix daemon in python, so I want to close stdin, stdout
    and stderr.
    My first attempt was to the standard file descriptors using their
    close() methods. After closing stdout, I could not print anymore, so
    this seemed to work. However, later I noticed that they were not really
    closed. When I close them using os.close(), it did work.
    What is the difference between these two methods and what is the reason
    behind it? It took me a day to find out why I could not log out after
    starting the daemon.

    Martijn
     
    Martijn Brouwer, Dec 26, 2005
    #1
    1. Advertisements

  2. Martijn Brouwer

    Robin Becker Guest

    I've had excellent results with variants of the cookbook entry at

    http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278731
     
    Robin Becker, Dec 26, 2005
    #2
    1. Advertisements

  3. Martijn Brouwer

    Robin Becker Guest

    Robin Becker, Dec 26, 2005
    #3
  4. I read this one, which was the reason that I tried os.close instead of
    sys.stdXXX.close(). But I would like to know why it does not close a
    file discriptor is I call its close method().


    Martijn
     
    Martijn Brouwer, Dec 27, 2005
    #4
  5. Well, I am writing a unix daemon ;)

    Martijn
     
    Martijn Brouwer, Dec 27, 2005
    #5
  6. Martijn Brouwer

    Donn Cave Guest

    They're special. I suppose because of internal dependencies - last
    chance exception handler etc. - they are created without a close
    function, internally, so close() has no effect. I don't know if it
    really makes any sense, since anyway one may close the file descriptors
    directly as you did.

    Donn Cave,
     
    Donn Cave, Dec 27, 2005
    #6
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.