我只使用脚本的名字在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编辑器并find
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
- 添加一个名为
InheritConsoleHandles
的DWORD值并将InheritConsoleHandles
设置为1
。
就是这样。
我不知道这个问题,但我有一个想法解决这个问题。 你有没有想过添加一个命令行选项(如-o
)来指定一个输出文件,将捕获输出?
如果您尝试从命令提示符redirectstdout和stderr,请参阅http://support.microsoft.com/kb/110930