实时输出到wx.text区域从stdou

2024-04-29 08:47:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有把adb logcat的输出打印到wx.text区域框,这一切都工作得很好,点击按钮和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的'findstr'函数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'))

为什么底部的代码,即过滤应用程序名称的代码,停止打印实时日志,而顶部却没有?我猜这和命令之间的管道有关。你知道吗


Tags: 代码应用程序stdoutlineparamsprocess按钮subprocess
1条回答
网友
1楼 · 发布于 2024-04-29 08:47:52

可以使用Python筛选行:

if pkgName in line:

顺便说一句:这可能是两个进程的问题,因为第二个进程可能等待EOF(文件结束)或其他信号(即关闭的管道),但它的stdin一直处于打开状态,等待来自第一个进程的新数据。。你知道吗

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

相关问题 更多 >