我想用Python 3脚本(在Linux上)逐行处理正在运行的程序的输出(想想tail -f).
程序输出(通过管道传递到脚本)以latin-1编码,因此,在Python 2中,我使用了编解码器模块正确解码了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,如果我只是从stdin中天真地阅读的话:
#!/usr/bin/env python3
import sys
for line in sys.stdin:
print ('type:{0} line:{1}'.format(type (line), line))
我收到此错误:
UnicodeDecodeError:“ utf8”编解码器无法解码位置4的字节0xf6:无效的起始字节
如何在Python 3中读取通过管道传递到stdin的非UTF-8文本数据?
解决方法:
import sys
import io
with io.open(sys.stdin.fileno(),'r',encoding='latin-1') as sin:
for line in sin:
print ('type:{0} line:{1}'.format(type (line), line))
产量
type:<class 'str'> line:Hi! öäß
标签:python,python-3-x,stdin 来源: https://codeday.me/bug/20191023/1912923.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。