从Linux中的打开窗口获取内容

1 投票
3 回答
1614 浏览
提问于 2025-04-16 17:25

我想从Linux系统中一个打开的窗口里收集数据并进行解析。

举个例子——假设有一个终端窗口是打开的。我需要获取这个窗口里显示的所有数据。获取后,我会解析这些数据,以找出输入的特定命令。

那么,这样做可能吗?如果可以的话,怎么做呢?我希望用Python来编写整个程序。

我猜想,首先我需要获取这个打开窗口的某种ID,然后再用某个库来获取这个ID对应窗口的内容。

请帮帮我。我还是个新手。

3 个回答

1

你是否能控制终端的执行?如果可以的话,你可以在终端会话中使用 script 命令,这样就能把所有的操作记录到一个文件里,然后你可以读取和解析这个文件。

$ script myfile
Script started, file is myfile
$ ls
...
$ exit
Script done, file is myfile
$ parse_file.py myfile

如果终端是在 screen 里面运行的,你还有其他选择。Screen 自带日志功能,使用 screen -X 可以向正在运行的 screen 会话发送命令(man screen)。

4

我觉得正确的答案可能是“有点困难”。简单来说,窗口里的内容就是一张位图。这张位图是通过很多基本图形元素绘制出来的(比如“显示这个八位字节串,使用那个编码和特定的字体”),但窗口的内容本质上还是“只是像素”。

获取这些“只是像素”的过程其实挺简单的。你只需要打开一个和X服务器的会话,然后告诉它“给我窗口W的内容”,它就会把内容交给你。

不过,想要对这些像素做一些有用的事情就完全是另一回事了,因为你可能需要(基本上)对位图进行光学字符识别(OCR),才能提取你想要的信息。

如果你决定走这条路,可以看看xwd的源代码,因为它基本上就是在做这个。

6

你可以利用工具库中提供的辅助技术支持(比如屏幕阅读器等)。不过,这个功能是否能用,得看具体的工具库——像Gtk和Qt就有这个支持,但其他的工具库(比如Tk、Fltk等)可能有也可能没有。

Linux桌面测试项目是一个用Python编写的工具,可以用来测试图形用户界面(GUI)应用程序,利用这些接口。如果你愿意,可以直接使用它,或者看看它是怎么工作的,然后自己做类似的事情。

撰写回答