当前位置: 首页 > 知识库问答 >
问题:

实时输出到 wx。来自标准输出的文本区域

商兴朝
2023-03-14

我有将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'))

为什么过滤应用程序名称的底层代码会停止打印实时日志,而顶层代码不会?我猜这与一个命令到另一个命令的管道有关。

共有1个答案

杜砚
2023-03-14

您可以使用Python过滤线:

if pkgName in line:

顺便说一句:这可能是两个进程的问题,因为第二个进程可能会等待EOF(文件结束)或其他信号(即关闭的管道),但它的<code>stdin</code>始终打开,等待第一个进程的新数据。。

看看这个:python-sub process-interaction-why-my-process-work-with-popen-communication

 类似资料:
  • 我是Java的初学者。学习罗伯特·塞奇威克的《Java导论》 我尝试在Netbeans中编译以下代码。 } 我收到了这个错误。我已将文件放置在标准位置。java 线程“main”java.lang.RuntimeException中的异常:无法编译的源代码-错误的sym类型:示例。StdIn.is在示例中为空。verage.main(verage.java:16)Java结果:1 BUILD SU

  • 回顾一下我们写的第一个 Rust 程序就是带副作用的,其副作用就是向标准输出(stdout),通常是终端或屏幕,输出了 Hello, World! 让屏幕上这几个字符的地方点亮起来。println! 宏是最常见的输出,用宏来做输出的还有 print!,两者都是向标准输出(stdout)输出,两者的区别也一眼就能看出。至于格式化输出,基础运算符和字符串格式化小节有详细说明,这里就不再啰嗦了。 更通用

  • 我正在尝试使用perl进行简单的问卷调查。我想在用户输入时将响应记录在日志文件中。我在将stdin重定向到文件时遇到问题。 下面是我实现的代码。参考这个。 我现在得到的输出是,只有在用户输入后,问题才被打印出来。 下面是预期的输出: 我还发现了重复的stdin到stdout,但真的无法实现我想要的。我错过了什么吗?! 有更清洁的解决方案吗?

  • 和之前 inputs/stdin 插件一样,outputs/stdout 插件也是最基础和简单的输出插件。同样在这里简单介绍一下,作为输出插件的一个共性了解。 配置示例 output { stdout { codec => rubydebug workers => 2 } } 解释 输出插件统一具有一个参数是 workers。Logstash 为输

  • 我最近想出了如何在汇编中写入 stdout,但现在无法从 stdin 中读取,并将我读取的内容输出回 stdout。这是我到目前为止的代码: 我很确定我看错了。我很确定和的行为没有达到预期(如果我将 替换为 次),这是导致我的问题的原因(当我输入输入并点击return时,它什么也不显示)。 我已经摸索了一段时间了,希望能得到任何帮助。(我这么做只是为了了解这不是家庭作业)。 我的问题本质上是我做错

  • 问题内容: 我有这个简单的脚本: 在这里,我只需执行一个命令即可编译咖啡脚本文件。但是stdout永远不会显示在控制台中,因为该命令永远不会结束(因为coffee的- w选项)。如果我直接从控制台执行命令,则会收到如下消息: 我的问题是:是否可以使用node.js exec显示这些消息?如果是,怎么办?! 谢谢 问题答案: 不要使用。使用哪个是对象。然后,您可以在事件 发生时 收听/ event(