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

时间:2011-05-11 07:05:09

标签: python linux window-managers

我想收集数据并最终从linux中的一个打开的窗口解析它。

示例 - 假设终端窗口已打开。我需要检索该窗口上显示的所有数据。检索后,我会解析它以获得输入的特定命令。

那么可以这样做吗?如果是这样,怎么样?我更愿意使用python来编写整个代码。

我猜测首先我必须为打开的窗口获取某种ID,然后使用某种类型的库来获取我已获得ID的窗口中的内容。

请帮忙。我是一个新手。

3 个答案:

答案 0 :(得分:5)

您可以(ab)使用工具包库中存在的辅助技术支持(用于屏幕阅读器等)。它是否有效是特定工具包-Gtk和Qt有这种支持,但其他(如Tk,Fltk等)可能会也可能不会。

Linux Desktop Testing Project是一个python工具包,用于滥用这些接口来测试GUI应用程序,因此您既可以使用它,也可以查看它是如何工作的,并做类似的事情。

答案 1 :(得分:4)

我认为正确的答案可能是“有些困难”。本质上,窗口的内容是位图。这个位图是由一大堆原语(包括“显示这个八位字节串,使用该编码和特定字体”)绘制的,但窗口内容仍然只是“像素”。

获得“正好像素”非常简单,就像这些事情一样。你打开一个到X服务器的会话,并说“给我窗口W的内容”,然后交给它。

不幸的是,做一些有用的事情是一个完全不同的事情,因为你可能必须(基本上)OCR你想要的位图。

如果您决定采用这条路线,请查看xwd的来源,基本上就是这样。

答案 2 :(得分:1)

您是否对终端的执行有某种控制权?在这种情况下,您可以在终端会话中使用script命令将所有交互记录到文件中,然后读取并解析该文件。

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

如果终端在screen内运行,您还有其他选项。屏幕内置了日志记录,screen -X将命令发送到正在运行的屏幕会话(man screen)。