使用pyg运行多个进程并捕获python中的输出

2024-04-27 00:36:05 发布

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

我想写一个简单的应用程序,运行多个程序并在多个终端(样式)窗口中显示它们的输出。此外,我希望能够读取这些进程的stdout/stderr并在输出中搜索关键字。在

我尝试用python实现这两种方法,第一种方法是使用子流程.Popen第二个使用vte(pythonvte)。在

我只让波本去投票。我必须不断检查进程是否有要读取的数据,读取数据,然后将其发送到我的文本区域。建议使用gobject.io_add_手表()相反,但每当我尝试挂起我的程序第二次调用io_add_watch时,它就好像一次只能处理一个文件描述符。在

vte工作得很好,但是我还没有找到一个可靠的方法来捕获输出。你可以在光标移动时得到一个回调,然后用/get_text()进行screen scrape,但我已经遇到过这样的情况:我正在查看的这些程序会一次性生成一个关于tty的淫秽内容,然后它就会退出屏幕。似乎没有包含要添加到窗口的新文本的回调。在

有什么想法吗?在


Tags: 方法io文本程序add应用程序终端进程
3条回答

如果你同意伊格库克的建议,我有一个相关的问题。这对我来说效果很好(我正在查看日志文件中的更改)。在

我用subprocess.Popen做了类似的事情。对于每个进程,我最终将stdout和stderr重定向到一个临时文件,然后定期检查文件的更新并将输出转储到TextView。在

不使用到进程的管道的原因是进程本身是不稳定的,并且容易出现分段错误。当这种情况发生时,我有时会丢失上次读取和段故障之间的数据(这是确定分段故障原因最需要的数据)。在

事实证明,有时我想保存特定进程的输出,所以这个方法对我很有效。在

您希望使用select监视子流程中的管道。这比投票要好。在

相关问题 更多 >