如果我從python的stdin讀取輸入,for循環會在循環的主體運行之前收集很多行(至少在cpython中)。Python讀取unicode stdin而沒有批處理
from __future__ import print_function
import sys
for line in sys.stdin:
print("Echo:", line.strip())
輸出:
$ python ../test.py
foo
bar
Echo: foo
Echo: bar
線在某種批次處理。 我能避免這樣的:
from __future__ import print_function
import sys
for line in iter(sys.stdin.readline, ''):
print("Echo:", line.strip())
輸出:
$ python ../test.py
foo
Echo: foo
bar
Echo: bar
這正是我需要的。
我的問題是,我不得不閱讀utf-8輸入和iter()
與伎倆不能與codecs.getwriter
。
from __future__ import print_function
import sys
import codecs
sys.stdin = codecs.getreader('utf-8')(sys.stdin)
for line in iter(sys.stdin.readline, ''):
print("Echo:", line.strip())
$ python ../test.py
foo
bar
Echo: foo
Echo: bar
有沒有什麼辦法可以避免從標準輸入讀取utf8數據時的批處理?
編輯: 的完整性添加import語句。
我想你的第一個例子,它沒有 「批」 的方式,你描述。你在做什麼系統? – tdelaney 2014-09-25 15:16:30
當您在控制檯中運行時,Python 2.x應該爲您找出編碼。 'print sys.stdin.encoding'是什麼意思? – tdelaney 2014-09-25 15:41:58
在Python2.7下運行的第一個程序不會產生你聲稱的輸出。 (它會打印'('Echo:','foo')')您使用的是哪個版本的Python? – 2014-09-25 16:04:11