我有一个脚本,旨在接受从标准输入管道输入的输入,然后提示用户输入更多输入。这是一个人为的例子,说明了我的意思:
import sys
# Get input from stdin
input_nums = [int(n.strip()) for n in sys.stdin]
# Prompt user
mult = int(raw_input("Enter a number by which to multiply your input: "))
for num in input_nums:
print num*mult
当我从标准输入管道输入数据时,python 在标准输入到达之前将其解释为已关闭,raw_input
并给出EOFError: EOF when reading a line
:
[user]$ cat nums.txt
2
3
4
5
[user]$ cat nums.txt | python sample.py
Enter a number by which to multiply your input: Traceback (most recent call last):
File "sample.py", line 6, in <module>
mult = int(raw_input("Enter a number by which to multiply your input: "))
EOFError: EOF when reading a line
(请不要担心无用的使用cat
......它只是一个最小的例子)
我想知道的是,是否有办法以某种方式将读取 sys.stdin 和调用分开,raw_input
这样我就可以输入数据,然后提示用户输入。
更新以通过消除红鲱鱼来更清楚我真正想要什么,并添加了 EOFError 的回溯
结果@TimPeter 的解决方案对我有用,但我不得不将“CON:”更改为“/dev/tty”,因为我使用的是 UNIX,而不是 Windows。