This is running on Windows 7 (64 bit), Python 2.6 with Win32 Extensions for Python.
I have a simple script that just print "hello world". I can launch it with python hello.py
. In this case I can redirect the output to a file. But if I run it by just typing hello.py
on the command line and redirect the output, I get an exception.
C:> python hello.py
hello world
C:> python hello.py >output
C:> type output
hello world
C:> hello.py
hello world
C:> hello.py >output
close failed in file object destructor:
Error in sys.excepthook:
Original exception was:
I think I first get this error after upgrading to Windows 7. I remember it should work in XP. I have seen people talking about this bug python-Bugs-1012692 | Can't pipe input to a python program. But that was long time ago. And it does not mention any solution.
Have anyone experienced this? Anyone can help?
UPDATED ANSWER
A Microsoft KB issue (STDIN/STDOUT Redirection May Not Work If Started from a File Association) may be exactly this issue. The page has instructions for downloading a Win2000 hotfix, but that might not be needed on more recent Windows versions. After the hotfix (or possibly without it, depending on your Win version), a manual registry edit is needed.
You should check the link I provided; in any case, I summarize here:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
InheritConsoleHandles
and set it to1
.That's it, supposedly.
I am not aware of the issue, but I have an idea to work around it. Have you thought about adding a command-line option (like
-o
) to specify an output file that will capture the output?Are you asking about this?
It's in the Python README. Perhaps this patch is what you're looking for.
If you are trying to redirect stdout and stderr from the command prompt, see http://support.microsoft.com/kb/110930