我想收集数据并最终从Linux中的打开窗口解析它。从Linux中的打开窗口获取内容
一个例子 - 假设一个终端窗口是打开的。我需要检索出现在该窗口上的所有数据。检索后,我会解析它以获取输入的特定命令。
那么有可能做到这一点?如果是这样,怎么样?我宁愿使用python编写整个代码。
我在猜测,首先我必须为打开的窗口获得某种ID,然后使用某种类型的库从窗口中获取其ID已达到的内容。
请帮忙。我是一个新手。
我想收集数据并最终从Linux中的打开窗口解析它。从Linux中的打开窗口获取内容
一个例子 - 假设一个终端窗口是打开的。我需要检索出现在该窗口上的所有数据。检索后,我会解析它以获取输入的特定命令。
那么有可能做到这一点?如果是这样,怎么样?我宁愿使用python编写整个代码。
我在猜测,首先我必须为打开的窗口获得某种ID,然后使用某种类型的库从窗口中获取其ID已达到的内容。
请帮忙。我是一个新手。
您对终端的执行有某种控制吗?在这种情况下,您可以在终端会话中使用script
命令将所有交互记录到文件中,然后读取并解析文件。
$ script myfile
Script started, file is myfile
$ ls
...
$ exit
Script done, file is myfile
$ parse_file.py myfile
如果终端运行在screen
以内,还有其他选项。屏幕内置了日志记录,screen -X
将命令发送到正在运行的屏幕会话(man screen)。
您可以(ab)使用工具包库中存在的辅助技术支持(用于屏幕阅读器等)。它是否可以工作是特定的工具包— Gtk和Qt有这种支持,但其他人(如Tk,Fltk等)可能会或可能不会。
Linux Desktop Testing Project是一个用于滥用这些接口来测试GUI应用程序的python工具包,所以你可以使用它或者看看它是如何工作的并且做类似的事情。
我认为正确的答案可能是“有些困难”。本质上,窗口的内容是一个位图。这个位图被一大堆原语(包括“显示这个八位字符串,使用该编码和一个特定字体”)绘制,但窗口内容仍然是“仅仅像素”。
获取“正像素”非常简单,就像这些事情一样。你打开一个会话到X服务器,并说“给我的窗口W的内容”,它交给它。
不幸的是,做一些有用的事情是一个完全不同的问题,因为您可能必须(基本上)为您想要的OCR位图。
如果您决定采用该路线,请查看xwd
的来源,就像那样,本质上就是这样。
好的。这是一个非常有用的答案。这意味着以文本形式检索信息是不容易的。 – 5lackp1x3l0x17 2011-05-11 08:37:45
@ 5lackp1x3l0x17:尽管如此,大多数应用程序都有专门的支持来为辅助技术(例如屏幕阅读器)提供文本格式,因此您可以在可用的地方使用它。 – 2011-05-11 08:53:54
@Jan好主意!将搜索更多的。 – 5lackp1x3l0x17 2011-05-11 09:12:17
终端只是一个例子。我真正的目的是读取另一个窗口(例如gedit,网页等)的内容。是的,我可以控制整个终端。 – 5lackp1x3l0x17 2011-05-11 07:19:56