【发布时间】:2011-03-15 00:34:28
【问题描述】:
我想使用 Python 3 脚本(在 Linux 上)逐行处理正在运行的程序的输出(想想 tail -f)。
通过管道传输到脚本的程序输出以 latin-1 编码,因此,在 Python 2 中,我使用 codecs 模块正确解码 sys.stdin 的输入:
#!/usr/bin/env python
import sys, codecs
sin = codecs.getreader('latin-1')(sys.stdin)
for line in sin:
print '%s "%s"' % (type (line), line.encode('ascii','xmlcharrefreplace').strip())
这行得通:
<type 'unicode'> "Hi! öäß"
...
但是,在 Python 3 中,sys.stdin.encoding 是 UTF-8,如果我只是天真地从标准输入中读取:
#!/usr/bin/env python3
import sys
for line in sys.stdin:
print ('type:{0} line:{1}'.format(type (line), line))
我收到此错误:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf6 in position 4: invalid start byte
如何在 Python 3 中读取通过管道传输到标准输入的非 UTF-8 文本数据?
【问题讨论】:
标签: python python-3.x stdin