I ran into a very strange behaviour of raw_input(). I hope somebody can tell me how to fix this. (Or is this a problem in the python source?)
I will explain the problem by using 3 examples. (Sorry, long email) The first two examples are behaving normal, the thirth is strange....... I wrote the following flabbergasting code: #------------------------------------------------------------- print "1: This is the print statement." # Now halt the program until someone hits enter raw_input("2: This is the raw_input prompt.") import sys print "3: This is a possible solution. ", sys.stdout.flush() command = sys.stdin.readline() #------------------------------------------------------------- and saved it in the file 'script.py'. *** First, normal behaviour to stdout Now, I open a command line and run the following command: python script.py On screen appears, after a few 'enter' keys: 1: This is the print statement. 2: This is the raw_input prompt. 3: This is a possible solution. All works fine...... *** Second, redirected stdout to file, normal behaviour. >From the command prompt I run: python script.py > stdout_catch.txt The screen stays empty, and after a few 'enter' keys the prompt reapears. In the file 'stdout_catch.txt' are the lines: 1: This is the print statement. 2: This is the raw_input prompt. 3: This is a possible solution. And again, all works fine...... *** Thirst, redirect stderr to file, STRANGE behaviour...... >From the command prompt I run: python script.py 2> stderr_catch.txt This should redirect strerr to the file and stdout should stay on the screen. But..... What happens? After a few 'enter' keys, on screen apears: 1: This is the print statement. 3: This is a possible solution. WHERE IS THE SECOND LINE? It is in the file stderr_catch.txt!!! **** See the problem? Please Tell me? Why is the prompt produced by raw_input() printed to the error channel? It should be stdout, just as the print statement does. Looking at the python source code on http://svn.python.org/view/python/tags/r251/Python/bltinmodule.c?rev=54864&view=auto [found: 'builtin_raw_input(PyObject *self, PyObject *args)']. One thing that I notice is that the code checks whether stdin and stdout are connected to a terminal ("isatty" function), but I do not know why the prompt ends up on stderr then..... **** What is the solution? I have noticed this behaviour under DOS in Windows XP, Windows 2000, Windows 2003 Server, Windows vista, and Linux. How do I get raw_input() to send it's prompt to stdout? Friendly greetings Rens -- http://mail.python.org/mailman/listinfo/python-list