24

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?

Piotr Dobrogost
  • 41,292
  • 40
  • 236
  • 366
Wai Yip Tung
  • 18,106
  • 10
  • 43
  • 47

4 Answers4

20

Are you asking about this?

Windows: When executing Python scripts on the command line using file type associations (i.e. starting "script.py" instead of "python script.py"), redirects may not work unless you set a specific registry key. See the Knowledge Base article STDIN/STDOUT Redirection May Not Work If Started from a File Association.

It's in the Python README. Perhaps this patch is what you're looking for.

Alexander
  • 23,432
  • 11
  • 63
  • 73
S.Lott
  • 384,516
  • 81
  • 508
  • 779
  • 1
    That's it. Just adding the InheritConsoleHandles registry value does it! Thanks a ton!!! – Wai Yip Tung Jun 11 '10 at 21:45
  • 1
    The link to the article is now dead. Here is an archive of the page: https://web.archive.org/web/20150403070207/http://support.microsoft.com/en-us/kb/321788 Edit: According to the latest version of that page, the issue was fixed in a service pack for Windows XP. – Arthur Tacca Jan 30 '19 at 08:01
8

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:

  • Open Registry Editor and locate the key HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
  • Add a DWORD value named InheritConsoleHandles and set it to 1.

That's it, supposedly.

tzot
  • 92,761
  • 29
  • 141
  • 204
1

If you are trying to redirect stdout and stderr from the command prompt, see http://support.microsoft.com/kb/110930

Bed
  • 11
  • 1
0

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?

jathanism
  • 33,067
  • 9
  • 68
  • 86
  • Thanks for your suggestion. This will do as a last resort :) But it is not as effortless as just typing ">output" on demand. Plus I have a lot of scripts and it is not practical to change all of them. – Wai Yip Tung Jun 10 '10 at 22:10