在I / O重定向中执行Python脚本时的EOFError

时间:2015-07-25 16:27:54

标签: python linux unix

如果我制作节目" prog.py"在Python中使用此代码:

#!/usr/bin/python3.3
# -*-coding:Utf-8 -*

while True:
    number = int(input())
    print(number * 2)

我有一个文件" numbers.txt"那个:

1
2
3
4
5
6
7
8
9
10

我这样运行:

chmod +x prog.py
cat numbers.txt | ./prog.py

我明白了:

2
4
6
8
10
12
14
16
18
20
Traceback (most recent call last):
  File "./prog.py", line 5, in <module>
    number = int(input())
EOFError: EOF when reading a line

为什么会出现此错误?

2 个答案:

答案 0 :(得分:1)

这是因为你正在使用

while True:

将其替换为

import sys
for line in sys.stdin:
    number = int(line.strip())

答案 1 :(得分:1)

这是预期的;您尝试使用input读取标准输入,而不检查是否已到达文件末尾。但是,最好直接在文件sys.stdin上进行迭代,而不是重复调用input

import sys

for line in sys.stdin:
    number = int(line)
    print(number * 2)

当您到达文件末尾时,迭代将自动停止,因此无需明确检查它。