另一个问题是如何在使用unicode_literals时将字节字符串传递给subprocess.Popen到stdin。 How to fix an encoding migrating Python subprocess to unicode_literals?。答案解决了问题,并在收集子流程时发出了警告。 stdout字符串。
仍在使用:
from future import unicode_literals
最初,我在收集stdout时收到了相同的UnicodeDecodeError错误。所以!使用我的新知识,我在一个单独的线程中更新了服务stdout的接收代码:
for text in iter(popen.stdout.readline,''):
text = text.decode(encoding)
text = text.strip(' \r\n')
这解决了错误,但出现了一个新警告:
test.py:456: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
for text in iter(popen.stdout.readline,''):
通过一点搜索,我发现我可以像这样压制警告信息:
with warnings.catch_warnings():
warnings.simplefilter("ignore")
for text in iter(popen.stdout.readline,''):
text = text.decode('utf-8')
text = text.strip(' \r\n')
问题:有没有办法解决不匹配或抑制处理此问题的最佳方法?
答案 0 :(得分:1)
popen.stdout.readline
返回一个字节字符串,而不是Unicode字符串;但是你要将它与Unicode字符串''
进行比较。使用b''相反,它应该更好地工作(没有抑制有用的警告! - ):
for text in iter(popen.stdout.readline, b''):