从终端进程

时间:2017-10-09 17:11:41

标签: android python encoding utf-8 logcat

我正在使用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-32UTF-16ASCII,但它总是崩溃。

如何解决此问题或至少部分工作 - 例如让它忽略它无法解码的字符?

1 个答案:

答案 0 :(得分:0)

迟到总比不到好:

“问题”是您的logcat输出中有不可解码的字节。从Python的角度来看,这没有什么错,只是无效的数据。

据我所知,adb logcat的输出绝不能是不可解码的字节。如果看到UTF-8无法解码的字节,则您的logcat数据可能已损坏,最好的选择是清除它并重试:

$ adb logcat -c