python:从stdin和raw_input读取数据

时间:2016-08-09 16:42:43

标签: python stdin eoferror

我想使用echo将一些数据传递给python脚本,之后将用户提升为输入选项。我正在浏览EOFError,我认为这是因为我在sys.stdin中读取了所有数据。我该如何解决这个问题?谢谢!

code.py:

x = ''
for line in sys.stdin:
  x += line
y = raw_input()

用法:

echo -e -n '1324' | ./code.py
raw_input()处的

错误:

EOFError: EOF when reading a line

2 个答案:

答案 0 :(得分:2)

使用:

{ echo -e -n '1324'; cat; } | ./code.py

首先echo将文字字符串写入管道,然后cat将从标准输入读取并将其复制到管道。 python脚本会将此全部视为标准输入。

答案 1 :(得分:1)

您无法通过stdin(重定向)发送数据,然后返回交互模式。

执行a | b时,b无法再读取标准输入。如果它想要这样做,它会在a完成并打破管道后立即停止。

但是当a完成时,并不意味着你再次抓住stdin

也许你可以改变你想做的事情,例如:

echo -n -e '1324' | ./code.py

变为

./code.py '1234' '5678'

并使用sys.argv[]获取12345678 ...

的值
import sys

x = ''
for line in sys.argv[1:]:
  x += line+"\n"

y = raw_input()

如果要输出很多行,则传递一个参数,这是一个文件,你会读到什么

import sys

x = ''
for line in open(sys.argv[1],"r"):
  x += line

y = raw_input()