当前位置: 首页 > 面试题库 >

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

汲利
2023-03-14
问题内容

我正在尝试这样的事情

输出.py

print "Hello"

输入.py

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

在cmd行

Output.py | Input.py

但它返回 EOFError 。有人可以告诉我我在做什么错吗?

谢谢你的帮助。

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

更改为:

Output.py | python Input.py

输出将是:

给我问候 问候是:你好


问题答案:

我在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正确重定向到stdin,以用于input.py。

参考

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

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

更新2

若要更改此行为并使Windows管道按预期的方式进行stdin /
stdout重定向,可以将此值添加到注册表中(在我的盒子上经过测试,并根据需要验证了此功能)。

  1. 启动注册表编辑器。
  2. 找到并单击注册表中的以下项:

HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \
Policies \ Explorer

  1. 在“编辑”菜单上,单击“添加值”,然后添加以下注册表值:

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

  1. 退出注册表编辑器。


 类似资料:
  • 因此,下面的代码,从txt文件中取序列号作为参数,在我的计算机上正常工作。每个数字都写在一行上。下面是代码: 但它在CodeEval中不起作用。站点编译器是这么说的: Fontconfig错误:无法加载默认配置文件线程“main”java.awt.HeadLessException:未设置X11显示变量,但此程序执行了需要它的操作。在java.awt.GraphicsEnvironment.Che

  • 问题内容: 我正在尝试通过以下方式将日期范围划分为各个日期: 而且我不知道为什么不起作用,因为日期仍然相同,所以循环变得无限。 问题答案: plusDays不会改变原始的,您必须分配结果:

  • 我对NAT表的理解是 NAT表仅映射(专用IP:端口)->(公用IP:端口) 它不关心协议或套接字连接 主机A关闭套接字并在同一本地端口(100)上打开新监听套接字 但这没用!我发现了其他复杂的实现,但我很好奇这种方式有什么问题。

  • 问题内容: 嗨,我只是想创建一个简单的golang应用程序,它使用以下命令在identi.ca上发布新的凹痕 到目前为止,这是我的代码,恕我直言,这应该起作用,但实际上它不起作用,有人知道如何解决此问题吗? 编辑: 不:我没有收到任何错误消息:/ 问题答案: 不会将整个命令行作为单个参数。您需要将其称为: 您怎么知道是否遇到错误?您无需检查的返回值。 您实际上应该将命令创建与运行分开。这样,您可以

  • 问题内容: 为什么这项工作有效- 但这不是- 第二种情况下的输出为。你能解释一下输出吗? 问题答案: 该方法没有返回值。它会在适当的位置更改列表,并且由于您没有将分配给任何变量,因此只是“迷失在空间” 我没有重载所有有问题的方法,但是概念应该很清楚。

  • 问题内容: 当我通过redis EVAL运行此代码时,它不会返回任何结果。知道为什么这行不通吗? bug.lua 如果我初始化表,则仅打印该值。 问题答案: 如果您参考Redis 文档 ,则可以看到Redis将Lua表转换为Redis回复所使用的规则: Lua表(数组)-> Redis多批量回复( 如果有的话,将被截断为Lua数组中的第一个nil ) Lua表带有单个ok字段-> Redis状态回