Package CedarBackup2 :: Module util :: Class Pipe
[show private | hide private]
[frames | no frames]

Class Pipe

Popen3 --+    
         |    
    Popen4 --+
             |
            Pipe


Specialized pipe class for use by executeCommand.

The executeCommand function needs a specialized way of interacting with a pipe that isn't satisfied by the standard Popen3 and Popen4 classes in popen2. First, executeCommand only reads from the pipe, and never writes to it. Second, executeCommand needs a way to discard all output written to stderr, as a means of simulating the shell 2>/dev/null construct.

This class inherits from Popen4. If the ignoreStderr flag is passed in as False, then the standard Popen4 constructor will be called and stdout and stderr will be intermingled in the output.

Otherwise, we'll call a custom version of the constructor which was basically stolen from the real constructor in python2.3/Lib/popen2.py. This custom constructor will redirect the stderr file descriptor to /dev/null. I've done this based on a suggestion from Donn Cave on comp.lang.python.

In either case, the tochild file object is always closed before returning from the constructor, since it is never needed by executeCommand.

I really wish there were a prettier way to do this. Unfortunately, I need access to the guts of the constructor implementation because of the way the pipe process is forked, etc. It doesn't work to just call the superclass constructor and then modify a few things afterwards. Even worse, I have to access private popen2 module members _cleanup and _active in order to duplicate the implementation.

Hopefully this whole thing will continue to work properly. At least we can use the other subprocess.Popen-based implementation when that class is available.

Copyright: Some of this code, prior to customization, was originally part of the Python 2.3 codebase. Python code is copyright (c) 2001, 2002 Python Software Foundation; All Rights Reserved.

Method Summary
  __init__(self, cmd, bufsize, ignoreStderr)
    Inherited from Popen3
  poll(self)
Return the exit status of the child process if it has finished, or -1 if it hasn't finished yet.
  wait(self)
Wait for and return the exit status of the child process.

Class Variable Summary
    Inherited from Popen4
NoneType childerr = None                                                                  
    Inherited from Popen3
int sts = -1                                                                    

Generated by Epydoc 2.1 on Mon Sep 4 13:49:34 2006 http://epydoc.sf.net