2011-05-11 20 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