我正在使用adb logcat
命令从命令行检索Logcat Android设备。我不知道Android设备日志编码(实际上是在过去3个月内尝试查找此信息) - 因为设备日志中可能有许多语言,例如中文,日文,阿拉伯文或特殊字符,如表情符号或©等等。
我的Python3脚本如下所示:
import subprocess
ADB_LOCATION = "/Users/F1sherKK/Library/Android/sdk/platform-tools/adb"
ADB_DEVCE = "-s emulator-5554"
ADB_LOGCAT = "logcat"
LOGCAT_MONITOR_CMD = "{} {} {}".format(ADB_LOCATION, ADB_DEVCE, ADB_LOGCAT)
with subprocess.Popen(LOGCAT_MONITOR_CMD, shell=True,
stdout=subprocess.PIPE, bufsize=1,
universal_newlines=True, encoding='utf-8') as p:
for line in p.stdout:
line_cleaned = line.strip()
# do something with Logcat line
但在某些时候这条线崩溃了:
for line in p.stdout:
出现以下错误:
UnicodeDecodeError:'utf-8'编解码器无法将字节0xc0解码到位 89:无效的起始字节
我不确定错误在哪里。我认为我使用的是错误的编码,因为我不知道Android Logcat的编码。尝试了各种常见的编码,例如UTF-32
,UTF-16
或ASCII
,但它总是崩溃。
如何解决此问题或至少部分工作 - 例如让它忽略它无法解码的字符?
答案 0 :(得分:0)
迟到总比不到好:
“问题”是您的logcat输出中有不可解码的字节。从Python的角度来看,这没有什么错,只是无效的数据。
据我所知,adb logcat
的输出绝不能是不可解码的字节。如果看到UTF-8无法解码的字节,则您的logcat数据可能已损坏,最好的选择是清除它并重试:
$ adb logcat -c