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

时间:2010-06-10 21:55:20

标签: python command-line winapi windows-7 redirect

这是在Windows 7(64位),Python 2.6和Win32 Extensions for Python上运行。

我有一个简单的脚本,只打印“hello world”。我可以使用python hello.py启动它。在这种情况下,我可以将输出重定向到文件。但是如果我只是在命令行输入hello.py并重定向输出来运行它,我会得到一个例外。

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:

我认为升级到Windows 7后我首先遇到此错误。我记得它应该在XP中运行。我见过有人在谈论这个错误python-Bugs-1012692 | Can't pipe input to a python program。但那是很久以前的事了。它没有提到任何解决方案。

有没有人经历过这个?有人可以帮忙吗?

4 个答案:

答案 0 :(得分:17)

你在问这个吗?

  

Windows:使用文件类型在命令行上执行Python脚本时           关联(即启动“script.py”而不是“python script.py”),           除非您设置特定的注册表项,否则重定向可能不起作用。看到           知识库文章STDIN/STDOUT Redirection May Not Work If Started from a File Association

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

答案 1 :(得分:8)

更新的答案

Microsoft KB问题(STDIN/STDOUT Redirection May Not Work If Started from a File Association)可能就是这个问题。该页面包含有关下载Win2000修补程序的说明,但在最新的Windows版本中可能不需要。在修复程序之后(或者可能没有它,具体取决于您的Win版本),需要手动进行注册表编辑。

您应该检查我提供的链接;无论如何,我在这里总结一下:

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

据说这就是它。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果您尝试从命令提示符重定向stdout和stderr, 见http://support.microsoft.com/kb/110930