Python - 将stdout的android logcat输出到textview然后保存为.txt文件错误

时间:2016-01-28 15:53:13

标签: android python wxpython logcat

我有以下Python代码,它使用Android logcat通过stdout将日志从手机拉到wxPython文本字段。 我登录到我的应用程序,用户名杰克和密码Jack @ 123 $ logcat输出因错误而停止,似乎不喜欢@或$符号:

    return codecs.charmap_decode(input,errors,decoding_table)
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 76: character maps to <undefined>

或者当我尝试将文本控件的GetValue()保存到一个打开写入的.txt文件时:

UnicodeEncodeError: 'ascii' codec can't encode characters in position  204447-204449: ordinal not in range(128)

logcat函数的代码如下

def logcat(self):
   params = [toolsDir + "\\adb.exe", "logcat"]
   p = Popen(params, stdout=subprocess.PIPE, bufsize=1)
   for line in p.stdout:
       #line = line.decode('Latin-1')
       self.progressBox.AppendText(line)

def saveLog(self,e):
    f = open(outDir + '\\' + pkgName + '\\' + pkgName + '_logcat.txt', 'w')
    f.write(self.progressBox.GetValue())
    f.close()

使用stdout对这些符号实现解码的正确方法是什么? 感谢

1 个答案:

答案 0 :(得分:1)

编辑: 答案如下,我必须从stdout解码(&#39; utf-8&#39;)到文本框,然后在写入文件时编码(&#39; utf-8&#39;)。

    for line in p.stdout:
        self.progressBox.AppendText(line.decode('utf-8'))


    f.write(self.progressBox.GetValue().encode('utf-8'))