天天看點

《Python Cookbook(第2版)中文版》——1.25 将HTML文檔轉化為文本顯示到UNIX終端上

本節書摘來自異步社群《python cookbook(第2版)中文版》一書中的第1章,第1.25節,作者[美]alex martelli , anna martelli ravenscrof , david ascher ,高鐵軍 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

任務

需要将html文檔中的文本展示在unix終端上,同時還要支援粗體和下劃線的顯示。

解決方案

最簡單的方法是寫一個過濾的腳本,從标準輸入接收html,将輸出文本和終端控制序列列印到标準的輸出上。由于本節的問題隻針對unix,我們可以借助python标準庫的os子產品提供的popen函數,通過unix的指令tput擷取所需的終端控制序列:

讨論

python标準庫提供的formatter.abstractformatter類,可以在任何場合工作。另一方面,它的子類ttyformatter提供的一些改良,則主要是為了操縱和使用類unix(unix-like)終端,具體地說,也就是通過unix指令tput擷取控制粗體和下劃線的轉義序列,并将終端重置為基本狀态。

很多系統并沒有通過unix認證,比如linux和mac os x,但它們也提供了一個可用的tput指令,是以本節的ttyformatter子類在這樣的系統中仍然可以正常工作。或者這麼說,可以用更寬泛的眼光來看待本節提及的“unix”,就好像我們在一些其他讨論中所用的“unix”概念:如果你願意,可以認為它指的是“*ix”。

如果你的“終端”模拟器支援其他的一些控制輸出表現的轉義序列,也可以根據情況修改ttyformatter類。比如,據說在windows中,cmd.exe指令能夠支援所有标準的ansi轉義序列,是以如果你隻想在windows上運作你的腳本,可以用寫死的方式在類中寫入那些序列。

很多時候,你可能會更喜歡用unix已經提供的指令,比如lynx -dump -,相比于本節方案中提供的方法,這些指令能夠提供更豐富更具表現力的輸出。但有時你會發現python安裝在一個不提供這種有用的指令(如lynx)的系統上,那麼本節給出的方法就顯得很友善和簡潔了。