2

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. Commented Jun 29, 2009 at 10:51

1 Answer 1

7

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

Sign up to request clarification or add additional context in comments.

2 Comments

Please consider editing your response so that it states that the problem is in Windows CMD.EXE, not in Python.
Not sure if this problem is really Windows specific, as I just encountered something similar on Linux - see my entry Linux: Pipe into Python (ncurses) script, stdin and termios - Stack Overflow

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.