从stdout实时输出到wx.TextArea

时间:2016-10-20 08:49:38

标签: android python android-logcat wxwidgets

我的代码会将adb logcat的输出打印到wx.TextArea框中,这一切都很好用,点击按钮并打开logcat,当手机点击完成并且一切正常时它打印出更多。 toolsDir和pkgName都是字符串。

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

但是我已经调整了这段代码,只打印出针对特定应用的日志,这是使用windows'reterstr'函数完成的,adb logcat | findstr myApp。下面的代码最初有效,但随后停止,并且不会显示任何其他任何事情,按钮点按,应用程序关闭等。 它就像缓冲区已经到达终点并且不会处理任何其他事件。

        args = [toolsDir + '\\adb.exe', 'logcat']
        args2 = ['findstr', pkgName]
        process_adb = subprocess.Popen(args, stdout=subprocess.PIPE, shell=False)
        process_fs = subprocess.Popen(args2, stdin=process_adb.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
        for line in process_fs.stdout:
            self.progressBox.AppendText(line.decode('utf-8'))

底层代码(过滤应用名称的代码)如何停止打印实时日志,但顶部不是?我猜它与一个命令到另一个命令的管道有关。

1 个答案:

答案 0 :(得分:0)

您可以使用Python过滤行:

if pkgName in line:
BTW:它可能是两个进程的问题,因为可能第二个等待EOF(文件结束)或其他信号(即封闭管道),但它的stdin始终打开,等待来自第一个的新数据过程..

请检查:python-subprocess-interaction-why-does-my-process-work-with-popen-communicate