我试图通过行改为子行:从TextIOWrapper读引起的UnicodeDecodeError
proc = subprocess.Popen(self.monitor_logcat_cmd, shell=True, stdout=subprocess.PIPE,
bufsize=1, universal_newlines=True)
while proc.poll() is None:
line = proc.stdout.readline()
print("Process line: " + str(line))
它的工作原理,但在某些时候,我得到错误:
Exception in thread Thread-14:
Traceback (most recent call last):
File "/Users/F1sherKK/anaconda3/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File "/Users/F1sherKK/Dev/Python/AutomationTestSupervisor/session/SessionThreads.py", line 46, in run
line = proc.stdout.readline()
File "/Users/F1sherKK/anaconda3/lib/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 89: invalid start byte
有什么办法来添加/指定编码子进程的标准输出?我想补充错误“忽略”。
有没有其他方法可以解决这个问题?
那么过程产生什么字节,关掉'universal_newlines'?你知道过程产生什么编码吗? –
'monitor_logcat_cmd'包含什么?什么命令在shell中运行?你是否设置了“LANG”或“LC_CTYPE”环境变量? –
monitor_logcat_cmd是'adb -s 5554 logcat'它实时从Android设备读取日志。它可以包含我猜测的各种编码。例如,日志中可以有表情符号。我没有设置任何env变量。 – F1sher