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

23 投票
4 回答
21486 浏览
提问于 2025-04-15 23:49

这个是在Windows 7(64位)上运行的,使用的是Python 2.6和Win32扩展。

我有一个简单的脚本,只是打印“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系统上是可以正常工作的。我看到有人讨论过这个bug,链接在这里 python-Bugs-1012692 | 无法将输入重定向到python程序。不过那是很久以前的事了,而且里面没有提到任何解决办法。

有没有人遇到过这个问题?有人能帮忙吗?

4 个回答

1

如果你想从命令提示符中重定向标准输出和错误输出,可以查看这个链接:http://support.microsoft.com/kb/110930

8

更新的回答

一个微软的知识库问题(如果从文件关联启动,STDIN/STDOUT重定向可能无法工作)可能正是你遇到的问题。这个页面上有关于下载Windows 2000补丁的说明,但在更新的Windows版本上可能不需要这个补丁。在安装补丁之后(或者在某些Windows版本中可能不需要补丁),你需要手动修改注册表。

你可以查看我提供的链接;无论如何,我在这里简单总结一下:

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

就这样,应该就可以了。

20

你是在问这个吗?

在Windows系统中,当你通过文件类型关联来执行Python脚本时,比如直接输入"script.py"而不是"python script.py",那么重定向可能会失效,除非你设置一个特定的注册表键。你可以查看这篇知识库文章:如果通过文件关联启动,STDIN/STDOUT重定向可能无法工作

这个问题在Python的说明文件中有提到。也许这个补丁就是你需要的。

撰写回答