2
votes

Duplicate of this question. Vote to close.

Consider this at the windows commandline.

scriptA.py | scriptB.py

In scriptA.py:

sys.stdout.write( "hello" )

In scriptB.py:

print sys.stdin.read()

This generates the following error:

c:\> scriptA.py | scriptB.py
close failed: [Errno 22] Invalid argument
Traceback (most recent call last):
  File "c:\scriptB.py", line 20, in <module>
    print sys.stdin.read()
IOError: [Errno 9] Bad file descriptor

The "close failed" message seems to come from execution of scriptA.py.

It doesn't matter if I use sys.stdin.read(), sys.stdin.read(1), sys.stdin.readlines() etc etc.

What's wrong?

Duplicate of this question. Vote to close.

1
I just tried it with python a.py | python b.py , which works fine. See Johan's answer for the reason.balpha

1 Answers

7
votes

It seems that stdin/stdout redirect does not work when starting from a file association. This is not specific to python, but a problem caused by win32 cmd.exe.

See: http://mail.python.org/pipermail/python-bugs-list/2004-August/024920.html