代码之家  ›  专栏  ›  技术社区  ›  Wai Yip Tung

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

  •  21
  • Wai Yip Tung  · 技术社区  · 14 年前

    这是在Windows7(64位)的python 2.6上运行的,它带有针对python的win32扩展。

    我有一个简单的脚本,只是打印“你好世界”。我可以用 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:
    

    我想我在升级到Windows7之后首先会得到这个错误。我记得它应该在XP中工作。我见过有人谈论这个虫子 python-Bugs-1012692 | Can't pipe input to a python program . 但那是很久以前的事了。它没有提到任何解决方案。

    有人经历过吗?有人能帮忙吗?

    4 回复  |  直到 7 年前
        1
  •  17
  •   Alexander    7 年前

    你在问这个吗?

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

    它在python自述文件中。也许这个补丁就是你要找的。

        2
  •  8
  •   tzot    14 年前

    更新答案

    Microsoft知识库问题( 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 并将其设置为 1 .

    据说就是这样。

        3
  •  0
  •   jathanism    14 年前

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

        4
  •  0
  •   Bed    11 年前

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