2012-03-06 103 views
4

我有这个循环读取标准输入行,直到输入换行符,但是,这只能在输入中输入。如何让程序通过命令行从重定向的stdin中读取行?从python重定向标准输入读取输入

例如:

$ python graph.py < input.input 

这里是环我要读的输入线:

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

它是如何工作的? – 2012-03-06 17:51:47

+0

程序挂在循环的第二行,除非用键盘中断它,否则不会退出。 – 2012-03-06 17:53:44

+1

你确定你的文件以'\ n'行结尾吗?你可能在这里遇到无限循环。很可能你的文件以'''行结尾。 – 2012-03-06 17:53:49

回答

11

正如其他有提到,可能你的情况line == '\n'从来没有成立。正确的解决方案是使用如下循环:

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

完美!谢谢! – 2012-03-06 18:03:42

1

ETA:根据你正在运行到一个无限循环您的评论,你可能只是在文件末尾没有空行。


使用pipe字符:

input.input | python graph.py 

如果input.input实际上是一个文件,而不是流,使用cat从它创建流:

cat input.input | python graph.py 
+1

这应该如何帮助? – 2012-03-06 17:59:04

+0

Niklas:查看编辑 – 2012-03-06 17:59:54