sys.stdout / sys.stderr, subprocess, redirection

Roman Neuhauser neuhauser+python-list#python.org at sigpipe.cz
Mon Apr 4 16:57:29 EDT 2005


Hello,

I have a piece of code that gets run in a script that has its stdout
closed:

    import sys
    sys.stdout = sys.stderr

    c = subprocess.Popen (...,
                          stdin  = subprocess.PIPE,
                          stdout = subprocess.PIPE,
                          stderr = subprocess.STDOUT)

and this is what I get:

Sending        SVNR/permissions
Transmitting file data .svn: Commit failed (details follow):
svn: 'pre-commit' hook failed with error output:
Traceback (most recent call last):
  (...)
  File ".../__init__.py", line 40, in run
    stderr = subprocess.STDOUT)
  File "/usr/local/lib/python2.4/subprocess.py", line 554, in __init__
    errread, errwrite)
  File "/usr/local/lib/python2.4/subprocess.py", line 986, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

This is the child_traceback:

  File "/usr/local/lib/python2.4/subprocess.py", line 955, in _execute_child
  File "/usr/local/lib/python2.4/os.py", line 341, in execvp
  File "/usr/local/lib/python2.4/os.py", line 379, in _execvpe
    func(fullname, *argrest)
OSError: [Errno 2] No such file or directory

Is this a problem in subprocess (I'm using the FreeBSD port of Python-2.4
and subprocess that comes with that release) or is this expected? If my
expectations are broken (likely), what should the standard descriptor
massaging look like?

Subversion code that runs the script can be seen at
http://svn.collab.net/viewcvs/svn/trunk/subversion/libsvn_repos/hooks.c
(run_hook_cmd()).

-- 
How many Vietnam vets does it take to screw in a light bulb?
You don't know, man.  You don't KNOW.
Cause you weren't THERE.             http://bash.org/?255991



More information about the Python-list mailing list