我尝试逐行读取子进程:
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
有没有办法为子进程的stdout添加/指定编码?我想添加错误“忽略”。
还有其他方法可以解决这个问题吗?
答案 0 :(得分:1)
您可以将errors
关键字参数设置为Popen()
至'ignore'
。来自documentation:
如果指定编码或错误,或者 universal_newlines 为true,则文件对象 stdin ,编码和错误或{{的默认值>以文本模式打开> stdout 和 stderr 1}}。
但是,很明显,您的进程不使用UTF-8对其输出进行编码。您可能想知道a)它是否可以配置为生成不同的编码,或者b)使用了什么编码并将其配置(使用io.TextIOWrapper
关键字参数encoding
)。