M
Mike Kent
It's often useful for debugging to print something to stderr, and to
route the error output to a file using '2>filename' on the command
line.
However, when I try that with a python script, all prompt output from
raw_input goes to stderr. Consider the following test program:
=== Start test.py ===
import sys
def main():
print "Hello world"
raw_input("Press ENTER")
print "Goodbye world"
if __name__ == "__main__":
main()
=== End test.py ===
If I run it with the command line 'python2.5 test.py', I get the
following output:
Hello world
Press ENTER <=== This appeared,the program paused, I press ENTER,
and the program continued
Goodbye world
However, if I run it with the command line 'python2.5 test.py 2>/dev/
null' (I'm routing stderr output to /dev/null), I instead get:
Hello world
<=== No output appeared, the program paused, I
press ENTER, and the program continued
Goodbye world
This indicates to me that the prompt output of raw_input is being sent
to stderr. I did check the source code for raw_input, and it appears
to be sending it to stdout as expected.
I get this behavior on multiple OS platforms, with multiple versions
of Python. I am building python on these platforms myself, but to my
knowledge, I am not doing anything special which could account for
this behavior.
Any suggestions or pointers on how to get the expected behavior out of
raw_input?
route the error output to a file using '2>filename' on the command
line.
However, when I try that with a python script, all prompt output from
raw_input goes to stderr. Consider the following test program:
=== Start test.py ===
import sys
def main():
print "Hello world"
raw_input("Press ENTER")
print "Goodbye world"
if __name__ == "__main__":
main()
=== End test.py ===
If I run it with the command line 'python2.5 test.py', I get the
following output:
Hello world
Press ENTER <=== This appeared,the program paused, I press ENTER,
and the program continued
Goodbye world
However, if I run it with the command line 'python2.5 test.py 2>/dev/
null' (I'm routing stderr output to /dev/null), I instead get:
Hello world
<=== No output appeared, the program paused, I
press ENTER, and the program continued
Goodbye world
This indicates to me that the prompt output of raw_input is being sent
to stderr. I did check the source code for raw_input, and it appears
to be sending it to stdout as expected.
I get this behavior on multiple OS platforms, with multiple versions
of Python. I am building python on these platforms myself, but to my
knowledge, I am not doing anything special which could account for
this behavior.
Any suggestions or pointers on how to get the expected behavior out of
raw_input?