【问题标题】:Python raw_input following sys.stdin.read() throws EOFErrorsys.stdin.read() 之后的 Python raw_input 抛出 EOFError
【发布时间】:2011-11-07 09:19:06
【问题描述】:

before 提出了类似的问题,但答案提出了一种不适用于我的情况的解决方法。

电子邮件从 mutt 传送到脚本,并从 STDIN 读取:

message = sys.stdin.read()
# message is parsed and URLs are printed as a list to choose from...
selected_index = raw_input('Which URL to open?')

我知道 raw_input() 会得到 read() 留下的 EOF,但是有没有办法“重置”STDIN?

【问题讨论】:

  • 你在什么系统上?在 Linux 上,这可以正常工作!
  • Mac OS X (10.7)。 Alex Martelli 建议重新打开 STDIN here,但这似乎对我不起作用。
  • 我刚刚确认在 GNU/Linux 系统 (CentOS) 上也抛出了同样的异常。当我手动输入 STDIN(用 CTRL-D 终止输入)时,脚本工作正常,但调用 ./script.py < message 会产生上述问题。
  • OS X 过去也有类似的问题,但它们在 Python 2.7 中应该是 fixed(我在 2.7.1 上)。

标签: python


【解决方案1】:

你试过了吗:

message = sys.stdin.read()
sys.stdin = open('/dev/tty')
selected_index = raw_input('Which URL to open?')

这适用于 Linux;也许它也适用于 OSX。

【讨论】:

  • 不幸的是,它不起作用(这是针对我在第一篇文章中链接到的问题提出的解决方案)。在修改后的表单中,脚本在 到达 raw_input 函数之前等待输入,一旦我点击返回,就会发生错误。
  • 这很奇怪——我之前一定是做错了什么:现在可以了。谢谢!
  • 不错的技巧! Linux FTW
【解决方案2】:

尝试使用 sys.stdin.seek(0) 重置 STDIN

参考:http://docs.python.org/library/fileinput.html

【讨论】:

  • 这有点帮助 - EOFError 异常消失了,但 raw_input 现在被完全忽略(即脚本继续执行而不等待用户输入)。
猜你喜欢
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 2011-01-12
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多