This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Can't pipe input to a python program
Type: Stage:
Components: Windows Versions:
process
Status: closed Resolution: wont fix
Dependencies: Superseder:
Assigned To: tim.peters Nosy List: loewis, rivest, tim.peters
Priority: normal Keywords:

Created on 2004-08-20 05:31 by rivest, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
python_pipe_bug.txt rivest, 2004-08-20 05:33 More details...
Messages (7)
msg22145 - (view) Author: Ronald L. Rivest (rivest) Date: 2004-08-20 05:31
Details in attached file.  Basically, I want to be 
able (in Windows) to pipe input as in:
    type spam.txt | eggs.py
so that eggs can read the file spam.txt.  But I am
getting an  Errno 9: Bad file descriptor error message.

Thanks.

        Cheers,
        Ron Rivest
        rivest@mit.edu 
 [Please reply to rivest@mit.edu as well...]
msg22146 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2004-08-21 15:09
Logged In: YES 
user_id=21627

What shell is this in? I cannot reproduce this in a cmd.exe
window. However, that you report the version as "Windows 5.1
(Build 2600)" and not "Microsoft Windows XP [Version
5.1.2600]" (as ver.exe does), and that you use just ">" as
the prompt suggests you might be using a different command
interpreter.

Can you please add

print sys.stdin.fileno()

into the script? On my system, it gives "0".
msg22147 - (view) Author: Ronald L. Rivest (rivest) Date: 2004-08-21 17:43
Logged In: YES 
user_id=1090045

If I print out sys.stdin.fileno(), I get  -1 .
Ver.exe outputs: Microsoft Windows XP [Version 5.1.2600]
This is indeed the standard command interpreter; I set the
prompt envinronment variable to output just ">".

Thanks...

        Ron Rivest

msg22148 - (view) Author: Tim Peters (tim.peters) * (Python committer) Date: 2004-08-21 18:49
Logged In: YES 
user_id=31435

I see the same on my Win XP Pro SP1 box, but I expected 
to.  The problem is in cmd.exe (the native XP shell), and both 
MS shells (command.com and cmd.exe) have had multiple 
bugs with I/O redirection forever.  This somewhat confused 
MS KB article describes the current state for cmd.exe 
systems, in part incorrectly:

"STDIN/STDOUT Redirection May Not Work If Started from a 
File Association"

http://support.microsoft.com/default.aspx?kbid=321788

It works fine if you change the "eggs.py" part of your 
command line to "python eggs.py", where "python" is some 
string that resolves to your Python executable, or even to 
a .bat script that runs python.exe explicitly.  For example, I 
have a py.bat on my PATH, containing just

\python23\python.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

and then

    type spam.txt | py eggs.py

works fine.  The point is that it doesn't work if Python gets 
started via .py *association*; any other way of getting 
Python started works fine.

Since this has nothing to do with Python (same thing if you 
use, e.g., Perl), I'm closing this as 3rd Party, Won't Fix.

BTW, the KB article above claims the problem was fixed in XP 
SP1.  It does indeed appear to have been fixed for stdout 
redirection, but not for stdin.

You could also use Cygwin on Windows, whose default bash 
shell has sane behavior in this respect.

Martin, it's sure curious that it works for you!  My ver output 
is also "Microsoft Windows XP [Version 5.1.2600]".  Is that 
enough to distinguish Home from Pro versions?  I have Pro 
here.  What do you have?  Is yours a German flavor of XP?

I'll note that I get one more line of output than Ron reported 
(the first output line, about "a nonexistent pipe"):

C:\Code\python\PCbuild>type tcap.txt | eggs.py
The process tried to write to a nonexistent pipe.
Traceback (most recent call last):
  File "C:\Code\python\PCbuild\eggs.py", line 4, in ?
    text = sys.stdin.read()
IOError: [Errno 9] Bad file descriptor
msg22149 - (view) Author: Ronald L. Rivest (rivest) Date: 2004-08-21 19:50
Logged In: YES 
user_id=1090045

Thanks to tim_one!

Your analysis of the situation does seem correct, and
your proposed fix (to pipe to "python eggs.py" rather than
just to "eggs.py") works fine!

I agree that the "3rd Pary; Won't Fix" designation is
appropriate.

Thanks again!

        Cheers,
        Ronald L. Rivest
msg22150 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2004-08-22 06:55
Logged In: YES 
user_id=21627

It worked for me since I didn't reproduce Ron's actions
precisely :-(
I automatically did

  type spam.txt | \python23\python.exe eggs.py

since on that system, I had deleted the .py extension, so
merely typing "eggs.py" wouldn't have worked, anyway...
msg22151 - (view) Author: Tim Peters (tim.peters) * (Python committer) Date: 2004-08-22 07:18
Logged In: YES 
user_id=31435

Ah, that would explain it <wink>.  It's still curious that the KB 
article specifically lists the bug as being in XP Pro, but 
doesn't mention XP home.  Then again, there are several 
inaccuracies in that article ...
History
Date User Action Args
2022-04-11 14:56:06adminsetgithub: 40792
2004-08-20 05:31:29rivestcreate