[ python-Bugs-1531862 ] subprocess.Popen(cmd, stdout=sys.stdout) fails

SourceForge.net noreply at sourceforge.net
Tue Sep 5 19:17:53 CEST 2006


Bugs item #1531862, was opened at 2006-07-31 16:53
Message generated for change (Settings changed) made by niemeyer
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1531862&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Python Library
Group: Python 2.5
Status: Open
Resolution: None
Priority: 5
Submitted By: John A Meinel (jfmeinel)
>Assigned to: Gustavo Niemeyer (niemeyer)
Summary: subprocess.Popen(cmd, stdout=sys.stdout) fails

Initial Comment:
I'm currently using subprocess.Popen() to run a
command, and I allow the caller to specify where the
output should go.

One valid output is to send it to sys.stdout (fileno == 1)

The subprocess module seems to unconditionally close
stdout if a file handle is passed (even if it stdout).

Compare:
python -c "import subprocess,sys; \
  subprocess.Popen(['echo', 'hello'])"

versus
python -c "import subprocess,sys; \
  subprocess.Popen(['echo', 'hello'], stdout=sys.stdout)"

or even
python -c "import subprocess,sys; \
  subprocess.Popen(['echo', 'hello'], stdout=1)"

The first one prints 'hello' as expected.

The latter two give an error:
echo: write error: Bad file descriptor

Attached is a possible patch to subprocess.py

----------------------------------------------------------------------

Comment By: Anthony Baxter (anthonybaxter)
Date: 2006-08-16 04:16

Message:
Logged In: YES 
user_id=29957

Making it check for particular FD numbers is a bad idea.
Instead, it should check that any FD that's being closed
isn't in the set
(sys.stdin.fileno(), sys.stdout.fileno(), sys.stderr.fileno()) 




----------------------------------------------------------------------

Comment By: Neal Norwitz (nnorwitz)
Date: 2006-08-16 04:11

Message:
Logged In: YES 
user_id=33168

If stderr == stdout, this patch won't fix that, will it? 
Shouldn't you add 1, 2 to the blacklist for stderr?  (The
patch adds 2, I think 1 may also be required.)

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1531862&group_id=5470


More information about the Python-bugs-list mailing list