关于命令行:当我使用脚本名称在Windows上运行Python脚本时,无法重定向输出

Cannot redirect output when I run Python script on Windows using just script's name

这是在Windows7(64位)的python 2.6上运行的,它带有针对python的win32扩展。

我有一个简单的脚本,只打印"你好,世界"。我可以用python hello.py启动它。在这种情况下,我可以将输出重定向到一个文件。但是,如果只在命令行上键入hello.py并重定向输出,那么我会得到一个异常。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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:

我想我在升级到Windows7之后首先会得到这个错误。我记得它应该在XP中工作。我见过有人谈论过这个bug python-bugs-1012692无法将输入管道传输到python程序。但那是很久以前的事了。它没有提到任何解决方案。

有人经历过吗?有人能帮忙吗?


你在问这个吗?

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.

它在python自述文件中。也许这个补丁就是你要找的。


更新答案

Microsoft知识库问题(如果从文件关联启动,则stdin/stdout重定向可能不起作用)可能正是此问题。该页有下载Win2000修补程序的说明,但在较新的Windows版本上可能不需要。在修补程序之后(或者可能没有修补程序,这取决于您的win版本),需要手动编辑注册表。

您应该查看我提供的链接;无论如何,我在此总结:

  • 打开注册表编辑器并找到键HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
  • 添加一个名为InheritConsoleHandles的dword值,并将其设置为1

据说就是这样。


如果试图从命令提示重定向stdout和stderr,请参阅http://support.microsoft.com/kb/110930


我不知道这个问题,但我有一个解决的办法。您是否考虑过添加命令行选项(如-o)来指定将捕获输出的输出文件?