【发布时间】:2023-03-24 17:26:01
【问题描述】:
我有将 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 的“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'))
为什么底部代码(过滤应用名称的代码)会停止打印实时日志,而顶部却没有?我猜它与一个命令到另一个命令的管道有关。
【问题讨论】:
-
不能用 Python 过滤吗?
if pkgName in line: -
可能第二个进程等待 EOF(文件结束)。检查这个:stackoverflow.com/questions/9674511/…
-
总是最简单的事情,行之有效,没想到那样做!哦时刻。如果你把你的答案作为答案,我会接受。
标签: android python android-logcat wxwidgets