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

Posted

技术标签:

【中文标题】当我仅使用脚本名称在 Windows 上运行 Python 脚本时无法重定向输出【英文标题】:Cannot redirect output when I run Python script on Windows using just script's name 【发布时间】:2011-03-02 10:08:53 【问题描述】:

这是在 Windows 7(64 位)、Python 2.6 上运行的,带有适用于 Python 的 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 中工作。我看到人们谈论这个错误python-Bugs-1012692 | Can't pipe input to a python program。但那是很久以前的事了。它没有提到任何解决方案。

有人经历过吗?有人可以帮忙吗?

【问题讨论】:

你知道有两个输出流:stdout和stderr吗? 是的。我想重定向标准输出输出。 【参考方案1】:

你是在问这个吗?

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

它在 Python README 中。也许这个补丁就是你要找的。​​p>

【讨论】:

就是这样。只需添加 InheritConsoleHandles 注册表值即可!非常感谢!!! 文章的链接已经失效。这是该页面的存档:web.archive.org/web/20150403070207/http://support.microsoft.com/… 编辑:根据该页面的最新版本,该问题已在 Windows XP 的服务包中修复。【参考方案2】:

更新答案

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

大概就是这样。

【讨论】:

我在 PATHEXT 中有它。这就是我通常运行脚本的方式。不幸的是,无论是否输入 .py 扩展名,我都会遇到同样的错误。 @Wai:检查我的答案的“新的和改进的”版本,如果这对你有用,请告诉我。 糟糕。没有看到 S.Lott 已经提供了相同的链接。对不起:) 是的,这就是问题所在。谢谢。帮了大忙!【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

感谢您的建议。这将作为最后的手段 :) 但它并不像按需键入“输出”那么轻松。另外,我有很多脚本,要全部更改是不切实际的。

以上是关于当我仅使用脚本名称在 Windows 上运行 Python 脚本时无法重定向输出的主要内容,如果未能解决你的问题,请参考以下文章

Python 视图与复制错误希望我仅在脚本中使用 .loc

使用子进程在 Windows 上运行 Python 脚本

Windows 命令找不到脚本

怎样用QtCreator编辑运行python脚本

如何在js上运行Python脚本?或者,js怎么调用.py文件?

Windows操作系统——WindowsVulnScan提权辅助工具简介与使用教程