这是在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。但那是很久以前的事了。它没有提到任何解决方案。
有没有人经历过这个?有人可以帮忙吗?
答案 0 :(得分:17)
你在问这个吗?
Windows:使用文件类型在命令行上执行Python脚本时 关联(即启动“script.py”而不是“python script.py”), 除非您设置特定的注册表项,否则重定向可能不起作用。看到 知识库文章STDIN/STDOUT Redirection May Not Work If Started from a File Association。
它在Python自述文件中。也许这个补丁正是你要找的。 p>
答案 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