使用Python从重定向的标准输入读取输入

11

我有一个循环,它从标准输入读取行,直到输入了换行符为止,但这仅适用于通过键入输入的情况。如何让程序通过命令行重定向标准输入并读取行?

例如:

$ python graph.py < input.input

这里是我用来从输入中读取行的循环:

while 1:
     line = sys.stdin.readline()
     if line == '\n':
         break
     try:
       lines.append(line.strip())
     except:
       pass

程序在循环的第二行卡住了,除非我用键盘打断它,否则它不会退出。 - Christian Benincasa
2
你确定你的文件以 '\n' 结尾吗?你可能在这里遇到了无限循环。很可能你的文件以 '' 行结尾。 - Thomas Orozco
3个回答

16

正如其他人所提到的,你的条件line == '\n'可能永远不会成立。合适的解决方案是使用循环:

for line in sys.stdin:
  stripped = line.strip()
  if not stripped: break
  lines.append(stripped)

11

请考虑以下选项

import sys
sys.stdin = open("input.txt", "r")

5

预计完成时间:根据您的评论,您可能遇到了无限循环的问题,这很可能是因为文件末尾没有空行。


使用 管道 字符:
input.input | python graph.py

如果input.input实际上是一个文件而不是流,请使用cat从中创建一个流:
cat input.input | python graph.py

1
那怎么可能有帮助呢? - Niklas B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接