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

标签 python

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

我尝试在 python 中实现这两种方式,第一种使用 subprocess.Popen,第二种使用 vte (python-vte)。

我只让 Popen 能够进行轮询。我必须不断检查进程是否有数据要读取,读取数据,然后将其发送到我的 TextArea。建议使用 gobject.io_add_watch() 来代替,但每当我尝试我的程序在第二次调用 io_add_watch 时挂起——就好像它一次只能处理一个文件描述符。

vte 效果很好,但我还没有找到可靠的方法来捕获输出。当光标移动时,您可以获得回调,然后使用 get_text() 进行屏幕抓取,但我已经遇到过这样的情况:我正在查看的这些程序一次性生成了 tty 的下流内容,然后它就离开了屏幕。似乎没有包含要添加到窗口的新文本的回调。

有什么想法吗?

最佳答案

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

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

事实证明,有时我想保存特定进程的输出,所以这种方法对我来说效果很好。

关于python - 使用 pygtk 运行多个进程并捕获 python 中的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/896874/

相关文章:

python - 读取 csv 文件中的值,同时删除不需要的值

python - Django 中 `annotate` + `values` + `union` 的错误结果

python - 在 Pandas 数据框中将 yes/no 转换为整数类型 1/0(不仅仅是替换)

python - 使用openCV-python将两个轮廓分割成两个相同大小的不同图像

python - 初始化字典中变量的第一个实例

python - 如何使用 Python 将 JSON 中的值替换为 RegEx 在文件中找到的值?

python - 如何防止 pytest 删除测试用例之间的数据库记录?

python - 正则表达式捕获一组的多个重复

python - python plot get_loc(self,key,method,tolerance)错误

python - Reportlab 中的 Pandas DataFrames