0

我在 Python 中使用标准流重定向。我有一个 writer.py 文件,如下所示。

for data in (123, 0, 999, 42):
    print('%03d' % data)

它的输出被用作加法程序的输入。

import sys 
sum = 0 
while True:
    try:
      line = sys.stdin.readline()[:-1]
    except EOFError: break
    else:
        sum += int(line)
print(sum)

将第一个脚本的输出提供给 other 为:

python writer.py | python adder.py

这给了我错误:

 File "adder.py", line 9, in <module>
    sum += int(line)
ValueError: invalid literal for int() with base 10: ''

adder.py 脚本中需要更改的内容。

4

2 回答 2

1

您的adder.py文件应如下所示:

import sys
sum = 0
while True:
    line = sys.stdin.readline()[:-1]
    if line:
        sum += int(line)
    else:
        break

print(sum)

我希望它能解决你的问题。

于 2018-01-23T11:40:14.613 回答
0

当您调用readline()它时,它会返回文件的当前行(stdin 也被视为文件)或在 EOF 已达到时返回换行符。(文档

您的 writer.py 仅返回 4 个元素,但您的 adder.py 在无限循环中读取输入,因此当它读取这 4 个数字时,stdin 为空并readline()返回换行符,并且您无法将空白字符转换为int. 事实上,readline()[:-1]在你的情况下,你使用的只是一个空字符串。

另一方面,你的打印是在无限循环之后,所以它永远不会被调用(即使你用 KeybordInterrupt 停止它)。我建议使用类似的东西:

line = sys.stdin.readline()[:-1]
while line:
    #do stuff
    line = sys.stdin.readline()[:-1]
于 2018-01-23T12:20:37.353 回答