2011-05-11 18 views
1

我想收集数据并最终从Linux中的打开窗口解析它。从Linux中的打开窗口获取内容

一个例子 - 假设一个终端窗口是打开的。我需要检索出现在该窗口上的所有数据。检索后,我会解析它以获取输入的特定命令。

那么有可能做到这一点?如果是这样,怎么样?我宁愿使用python编写整个代码。

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

请帮忙。我是一个新手。

回答

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)。

+0

终端只是一个例子。我真正的目的是读取另一个窗口(例如gedit,网页等)的内容。是的,我可以控制整个终端。 – 5lackp1x3l0x17 2011-05-11 07:19:56

5

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

Linux Desktop Testing Project是一个用于滥用这些接口来测试GUI应用程序的python工具包,所以你可以使用它或者看看它是如何工作的并且做类似的事情。

4

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

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

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

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

+0

好的。这是一个非常有用的答案。这意味着以文本形式检索信息是不容易的。 – 5lackp1x3l0x17 2011-05-11 08:37:45

+2

@ 5lackp1x3l0x17:尽管如此,大多数应用程序都有专门的支持来为辅助技术(例如屏幕阅读器)提供文本格式,因此您可以在可用的地方使用它。 – 2011-05-11 08:53:54

+0

@Jan好主意!将搜索更多的。 – 5lackp1x3l0x17 2011-05-11 09:12:17