python:从标准输入读取数据,raw_input

python: read data from stdin and raw_input

我想使用 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

您只是不能通过标准输入(即重定向)发送数据然后返回交互模式。

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

但是当a完成后,并不意味着你又得到了stdin

也许你可以改变你想要做事的方式,例如:

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

变成

./code.py '1234' '5678'

并使用sys.argv[]得到1234的值,5678...

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()

使用:

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

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