我只使用脚本的名字在Windows上运行Python脚本时,无法redirect输出

这是运行在Windows 7(64位),Python 2.6与Python的Win32扩展。

我有一个简单的脚本,只是打印“你好世界”。 我可以用python hello.py启动它。 在这种情况下,我可以将输出redirect到一个文件。 但是,如果我通过在命令行上inputhello.py来运行它并redirect输出,我会得到一个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: 

我想我升级到Windows 7后第一次得到这个错误。我记得它应该在XP中工作。 我看到有人在讨论这个bug python-Bugs-1012692 | 不能pipeinput到python程序 。 但那是很久以前的事了 并没有提到任何解决scheme。

有没有人经历过这个? 任何人都可以帮忙

你问这个吗?

Windows:当使用文件types关联(即启动“script.py”而不是“python script.py”)在命令行上执行Python脚本时,redirect可能无法工作,除非设置了特定的registry项。 如果从文件关联开始,请参阅知识库文章STDIN / STDOUTredirect可能无效 。

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

更新的答案

Microsoft KB问题( STDIN / STDOUTredirect可能不起作用,如果从文件关联启动 )可能正是此问题。 该页面有下载Win2000修补程序的说明,但在更新的Windows版本上可能不需要。 修复程序(或可能没有它,取决于您的Win版本)后,需要手动registry编辑。

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

  • 打开registry编辑器并findHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
  • 添加一个名为InheritConsoleHandles的DWORD值并将InheritConsoleHandles设置为1

就是这样。

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

如果您尝试从命令提示符redirectstdout和stderr,请参阅http://support.microsoft.com/kb/110930