当前位置:  开发笔记 > 编程语言 > 正文

Windows上的Python管道:为什么这不起作用?

如何解决《Windows上的Python管道:为什么这不起作用?》经验,为你挑选了1个好方法。

我正在尝试这样的事情

Output.py

print "Hello"

Input.py

greeting = raw_input("Give me the greeting. ")
print "The greeting is:", greeting

在cmd线

Output.py | Input.py

但它返回一个EOFError.有人能告诉我我做错了什么吗?

谢谢你的帮助.

编辑
Patrick Harrington 解决方案有效,但我不知道为什么......



1> Jay..:

我在我的Windows机器上进行了测试,如果你指定了Python exe它就可以了:

C:\>C:\Python25\python.exe output.py | C:\Python25\python.exe input.py
Give me the greeting. The greeting is: hello

但如果直接运行命令,我也得到EOFError:

output.py | input.py 

我不确定为什么会这样,我仍在调查这个,但至少这应该为你提供一个解决方法.它可能与.py文件调用文件处理程序的方式有关.

更新:嗯,你知道什么.看起来这实际上是Windows中的一个错误,当从文件关联启动时,stdin/stdout重定向可能无法正常工作.所以解决方法是我自己和Patrick所指出的,你需要指定"python"将运行input.py,否则它将不会将stdout从output.py重定向到input.py的stdin.

参考:

http://mail.python.org/pipermail/python-bugs-list/2004-August/024923.html

http://support.microsoft.com/default.aspx?kbid=321788

更新2:

若要更改此行为并使Windows管道按预期的方式运行stdin/stdout重定向,您可以将此值添加到注册表(在我的框中测试并验证它可以按预期工作).

    启动注册表编辑器

    找到并单击注册表中的以下项:

    HKEY_LOCAL_MACHINE\SOFTWARE \微软\的Windows\CurrentVersion \政策\ Explorer中

    在"编辑"菜单上,单击"添加值",然后添加以下注册表值:

    值名称:InheritConsoleHandles
    数据类型:REG_DWORD
    基数:十进制
    值数据:1

    退出注册表编辑器.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有