如果我在Python中从标准输入读取输入,那么for循环将在循环体运行之前收集多行(至少在cpython中是这样)。
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
有没有办法在从stdin读取utf8数据时避免批处理?
< p>编辑: 为完整性添加了导入语句。
print sys.stdin.encoding
会输出什么? - tdelaney('Echo:', 'foo')
。)你实际上使用的是哪个版本的Python? - Robᵩ2.7.3 (默认, 2014年2月27日, 19:58:35)
[GCC 4.6.3]
这是sys.version的精确输出。 - bwjfrom __future__ import print_function
,抱歉。 - bwj