2012-03-06 197 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