中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Python的動態重新封裝的教程
來源:易賢網 閱讀:1140 次 日期:2015-04-14 15:05:44
溫馨提示:易賢網小編為您整理了“Python的動態重新封裝的教程”,方便廣大網友查閱!

讓我們描繪一下本文的情節:假設您要在本地機器上運行一個進程,而部分程序邏輯卻在另一處。讓我們特別假設這個程序邏輯會不時更新, 而您運行進程時,希望使用最新的程序邏輯。有許多方法可以滿足剛提到的要求;本文將向您說明其中幾種方法。

隨著“可愛的 Python”專欄不斷進行,已經討論了我的公共域實用程序 Txt2Html 的正在進行的增強。該實用程序將“智能 ASCII”文本文件轉換成 HTML。以前的文章討論了實用程序的 Web 代理版本和實用程序的 curses 界面。同樣,我偶爾注意到可以用更有效的方法轉換某些 ASCII 標記,或者解決了一個在處理某個特殊標記結構中的錯誤。

事實上,本專欄的文章都是用 ASCII 編寫的,然后在編輯過程中轉換成您可以閱讀的 HTML 格式。在發表文章草稿之前,我運行了類似以下處理的程序:

文章的命令行 HTML 化

?1 txt2html charming_python_7.txt > charming_python_7.html

如果愿意,我可以指定一些標志來修改操作;但不管怎樣,事實上轉換器的最新版本在我的本地驅動器和路徑中。如果在另一臺機器上工作,或者對于要使用該實用程序的讀者,則過程比較麻煩:請訪問我的網站,注意比較版本號和文件日期(有時更改太小,我不會更改版本號),下載當前版本、將當前版本復制到正確目錄,然后運行命令行轉換器。(請參閱本文后面的 參考資料。)

以上的過程包括幾個需要手工操作且比較費時的步驟。應該更簡單,而且可以做到這點。

命令行 Web 訪問

大多數人認為 Web 是在 GUI 環境中交互式瀏覽頁面的一種方法。那樣做當然很好,但命令行中也有許多功能。帶文本模式 Web 瀏覽器 lynx 的系統完全可以將整個 Web 看作是命令行工具使用的另一個文件集。例如,我發現有些命令很有用:

使用 lynx 進行命令行 Web 瀏覽

?123 lynx -dump . lynx -dump . > ibm_developer.txt lynx -dump | wc | sed "s/( *[0-9]* *\)\([0-9]*\)\(.*\)/\2/g"

第一行說:“將 David Mertz 的主頁(以 ASCII 文本)顯示到控制臺。”第二行說:“將 IBM 的當前 developerWorks 主頁的 ASCII 版本保存到文件。”第三行示例說:“顯示 David 主頁的字數。”(不必擔心細節,它只顯示與管道結合的命令行工具。)

關于 lynx,有一點要注意它(使用 -dump 選項時)執行幾乎與 Txt2Html 完全相反的操作:前一種工具將 HTML 轉換成文本;而后一種工具則轉換成其它格式。但沒有理由不使用與 lynx 一樣流行的 Txt2Html。可以使用一個很短的 Python 腳本完成這個操作:

'fetch_txt2html.py' 命令行轉換器

?12345678 import sys from urllib import urlopen, urlencode if len(sys.argv) == 2: cgi = 'http://gnosis.cx/cgi/txt2html.cgi' opts = urlencode({'source':sys.argv[1], 'proxy':'NONE'}) print urlopen(cgi, opts).read() else: print "Please specify URL for Txt2Html conversion"

要運行這個腳本,只要執行如下操作:

?1 python fetch_txt2html.py

這并沒有向您提供本地 Txt2Html 處理的全部開關,但如有必要,添加它們也很容易。可以像使用任何命令行工具一樣來輸送和重定向輸出。但是,在上述版本中,只能處理 URL 可以到達的數據文件,而不能處理本地文件。

實際上, fetch_txt2html.py 可以完成 lynx 不能完成的任務(Txt2Html 本身也不能):它不僅從 URL 取得數據源,而且還遠程獲取 程序邏輯 。如果使用 fetch_txt2html.py ,就 不必在本地機器上安裝 Txt2Html;將(使用最新版本)遠程調用處理,并且將把結果發送回來,就像運行的是本地進程。很棒吧?Txt2Html 的本地版本可以訪問遠程 URL,就像訪問本地文件一樣,但它還不能保證它自身是最新的……!

動態初始化

使用 fetch_txt2html.py 確保了在轉換中始終使用最新的程序邏輯。但是,這個方法可以完成的另一件事情是將處理器(和內存)的需求轉移給 gnosis.cx Web 服務器。此特殊進程的負載并不是特別高,但人們卻很可能認為在客戶機上處理的其它類型的進程會更有效且令人滿意。

組織 Txt2Html 的方式 -- 也就是組織大多數程序的方式 -- 是用一些由各種實用函數提供的核心流量控制函數。尤其是這些實用函數是一些經常更新的函數;核心函數( main() 和一些其它函數)只有在做重大改寫時才會變動。總而言之,在每個程序運行時有效更新的就是實用函數。其實,大部分情況下,主 Txt2Html 模塊 dmTxt2Html 中的大多數函數就夠了。

'd2h_textfuncs.py' 動態 Txt2Html 更新

?12345678910111213141516171819202122232425262728293031 """Hot-pluggable replacement functions for Txt2Html""" #-- Functions to massage blocks by type #def Titleify(block): #def Authorify(block): # ... [more block massaging functions] ... #-- Utility functions for text transformation #def AdjustCaps(txt): #def capwords(txt): #def URLify(txt): def Typographify (txt): # [module] names r = re.compile(r ""'([\(\s'/">]|^)\[(.*?)\]([<\s\.\),:;'"?!/-])""" , re.M | re.S) txt = r.sub( '\\1<em><code>\\2</code></em>\\3' ,txt) # *strongly emphasize* words r = re.compile(r ""'([\(\s'/"]|^)\*(.*?)\*([\s\.\),:;'"?!/-])""" , re.M | re.S) txt = r.sub( '\\1<strong>\\2</strong>\\3' , txt) # ... [more text massaging] ... return txt # ... [more text transformation functions] .....

要使用最新和最具體的支持模塊,需要一些準備步驟。首先,將主 Txt2Html 模塊下載到本地系統(這是一次性步驟)。其次,在本地系統上創建類似于以下示例的 Python 腳本:

'dyn_txt2html.py' 命令行轉換器

?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 from dmTxt2Html import * # Import the body of 'Txt2Html' code from urllib import urlopen import sys # Check for updated functions (fail gracefully if not fetchable) try : updates = urlopen( 'http://gnosis.cx/download/t2h_textfuncs.py' ).read() fh = open( 't2h_textfuncs.py' , 'w' ) fh.write(updates) fh.close() except : sys.stderr.write( 'Cannot currently download Txt2Html updates' ) # Import the updated functions (if available) try : from t2h_textfuncs import * except : sys.stderr.write( 'Cannot import the updated Txt2Html functions' ) # Set options based on runmode (shell vs. CGI) if len(sys.argv) >= 2: cfg_dict = ParseArgs(sys.argv[1:]) main(cfg_dict) else : print"Please specify URL (and options) for Txt2Html conversion"

在 dyn_txt2html.py 腳本中,請注意當執行 from t2h_textfuncs import * 語句時,所有以前在 dmTxt2Html 中定義的函數(如 Typographify() )都將由 t2h_textfuncs 版本的同名函數替換。當然,如果 t2h_textfuncs 的函數被注釋掉了,則不會被替換。

有件小問題得注意,不同的系統以不同的方式處理寫入 STDERR。在類 UNIX 系統中,運行腳本時可以重定向 STDERR;但是在當前 OS/2 外殼和 Windows/DOS 中,STDERR 消息將附加到控制臺輸出。您也許要將以上的錯誤/警告寫到日志文件中,或者只習慣于將 STDOUT 定向到文件(可能會更有用)。例如:

'dyn_txt2html' 的命令行會話

?12 G:\txt2html> python dyn_txt2html.py test.txt > test.html Cannot currently download Txt2Html updates

錯誤轉至控制臺;經轉換的輸出轉至文件。

一件更有趣的事情是 dyn_txt2html.py 為什么不下載整個 dmTxt2Html 模塊,而僅下載支持模塊。當然這是有理由的。 t2h_textfuncs 支持模塊遠遠小于主 dmTxt2Html 模塊,特別是因為大多數函數已經過刪節/被注釋掉。在調制解調器連接上,它的速度明顯快很多。但下載大小并不是主要原因。

對于 Txt2Html,如果用戶自動下載整個最新模塊也沒關系。但程序邏輯是 分布式 的系統(特別是維護責任也是分布式的)會發生什么情況呢?您也許會讓 Alice、Bob 和 Charlie 分別負責模塊 Funcs_A 、 Funcs_B 和 Funcs_C 。他們每個人都對他們負責的函數進行定期(且獨立)更改,并將最新和最好的版本上傳到他們自己的網站(如 )。在這種情況下,讓三個程序員都更改同一個主模塊不太可行。但可以直接擴展類似于 dyn_txt2html.py 的腳本以在啟動時嘗試導入 Funcs_A 、 Funcs_B 和 Funcs_C (如果不能獲取這些資源,則會退到 MainProg 版本)。

長期運行的動態進程

迄今為止,我們研究的工具已經通過在初始化時下載更新資源而獲得了動態程序邏輯。這對于命令行處理或批處理很有意義,但對于長期運行的應用程序又會怎樣。這種長期運行的應用程序最可能是一些不斷響應客戶機請求的服務器進程。但是在這個案例中,我們將使用為 以前的文章 開發的 curses_txt2html.py 來說明 Python 的 reload() 函數。程序 curses_txt2html 是 dmTxt2Html 本地副本的封裝器。這里并不是第二次提到 curses 編程,談一下 curses_txt2html 提供了一組交互式菜單以配置和運行多個連續的 Txt2Html 轉換也足夠了。

curses_txt2html 可以一直在后臺運行,當切換到它的會話并運行轉換時,我們希望它能夠使用最新的程序邏輯。對于這個特定的簡單示例,關閉和重新啟動應用程序并不難,并不會帶來特別的損害。但這很容易令人聯想到其它一直運行著的進程(可能是說明會話中所執行操作狀態的進程)。

在本文中,添加了新的 File/Update 子菜單。它被激活時只調用新的函數 update_txt2html() 。除了與提供發生的確認相關的 curses 調用之外,我們已經在本文的其它示例中看到過這些步驟:

'curses_txt2html.py' 動態更新函數

?123456789101112131415161718192021222324252627282930313233343536373839 def update_txt2html (): # Check for updated functions (fail gracefully if not fetchable) s = curses.newwin(6, 60, 4, 5) s.box() s.addstr(1, 2, "* PRESS ANY KEY TO CONTINUE *" , curses.A_BOLD) s.addstr(3,2, "...downloading..." ) s.refresh() try : from urllib import urlopen updates = urlopen( 'http://gnosis.cx/download/dmTxt2Html.py' ).read() fh = open( 'dmTxt2Html.py' , 'w' ) fh.write(updates) fh.close() s.addstr(3,2, "Module [dmTxt2Html] downloaded to current directory" ) except : s.addstr(3,2, "Download of updated [dmTxt2Html] module failed!" ) reload(dmTxt2Html) s.addstr(4, 2, "Module [dmTxt2Html] reloaded from current directory " ) s.refresh() c = s.getch() s.erase()

dyn_txthtml.py 和 update_txt2html() 函數之間有兩個重要差異。其中一個差異是繼續操作,并導入主 dmTxt2Html 模塊而不只導入支持函數。這主要是簡化了導入。這里的問題是我們使用 import dmTxt2Html 來訪問模塊,而不是 from dmTxt2Html import * 。從許多方面考慮,這是一個更安全的過程,但結果是使覆蓋 dmTxt2Html 中的函數變得更困難(不論是無心地還是故意地)。如果我們要從 d2h_textfuncs 附加函數,則必須對導入的支持模塊執行 dir() ,并將成員以屬性形式附加到 "dmTxt2Html" 名稱空間。執行這種樣式的覆蓋是留給讀者的練習。

update_txt2html() 函數帶來的最主要差異是 Python 的內置 reload() 函數的用法。只執行全新的 import dmTxt2Html 將 不 會覆蓋以前導入的函數。請密切注意這一點!許多初學者認為重新導入模塊將更新內存中的版本。這是錯的。實際上,更新模塊中函數的內存映像的方法是 reload() 模塊。

以上示例中還執行了另一個小技巧。更新 dmTxt2Html 模塊的下載位置是本地工作目錄,而這個目錄可能是(也可能不是)原來裝入 dmTxt2Html 的目錄。事實上,如果它在 Python 庫目錄中,那么您也許不在該目錄中使用(也許對它沒有用戶許可權)。但 reload() 調用嘗試先從當前目錄裝入,然后再嘗試 Python 路徑的其余部分。所以,不論下載是否成功, reload() 應該是一個安全的操作(雖然它可能裝入新的模塊,也可能不裝入)。

更多信息請查看IT技術專欄

更多信息請查看腳本欄目
易賢網手機網站地址:Python的動態重新封裝的教程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
久久久亚洲欧洲日产国码αv| 久久综合影音| 国产精品久久久久久久久| 狼狼综合久久久久综合网| 欧美一区二区视频网站| 亚洲午夜一区| 亚洲一区二区三区久久 | 国产亚洲成精品久久| 欧美日本免费| 欧美紧缚bdsm在线视频| 欧美风情在线| 欧美精品国产一区二区| 欧美精品在线一区| 欧美日韩国产小视频| 欧美日韩国产一区二区三区| 欧美日韩午夜视频在线观看| 欧美日韩精品一区| 国产精品精品视频| 国产欧美精品xxxx另类| 国产精品一区二区三区成人| 国产精品一区二区a| 国产欧美精品一区| 精品69视频一区二区三区| 亚洲福利视频一区二区| 亚洲黄色高清| 亚洲国产精品一区二区久| 亚洲国产1区| 99视频一区二区三区| 在线亚洲免费| 日韩手机在线导航| 亚洲欧美久久久| 久久亚洲精选| 欧美激情综合在线| 国产精品成人播放| 国产亚洲免费的视频看| 伊人婷婷久久| 日韩亚洲国产欧美| 亚洲欧美日韩视频一区| 久久在精品线影院精品国产| 欧美成人午夜激情在线| 国产精品狼人久久影院观看方式| 国产欧美日韩综合精品二区| 1769国内精品视频在线播放| 一区二区久久久久久| 久久av二区| 欧美精品在线观看一区二区| 国产欧美一区二区三区沐欲| 亚洲国产91| 亚洲在线电影| 久久久久久香蕉网| 国产精品国产精品国产专区不蜜| 狠狠干成人综合网| 亚洲精品精选| 久久视频一区| 国产精品一级在线| 91久久嫩草影院一区二区| 新狼窝色av性久久久久久| 麻豆精品精华液| 国产视频一区在线观看一区免费| 亚洲黄色视屏| 久久久久久久久久久久久女国产乱| 欧美激情乱人伦| 国语自产精品视频在线看| 亚洲精品在线视频| 久久成人亚洲| 欧美色视频日本高清在线观看| 国产亚洲精品aa午夜观看| 99re6这里只有精品| 久久精品九九| 国产麻豆成人精品| 亚洲美女av黄| 91久久精品国产91性色| 久久精品99国产精品酒店日本| 欧美日韩国产经典色站一区二区三区| 国产精品尤物福利片在线观看| 136国产福利精品导航网址应用| 欧美一级专区免费大片| 欧美视频免费| 夜夜夜精品看看| 欧美www在线| 黄色一区二区在线| 久久精品久久99精品久久| 国产精品另类一区| 亚洲午夜av| 国产精品mm| 宅男精品视频| 欧美色另类天堂2015| 亚洲三级电影全部在线观看高清| 久久精品国产亚洲5555| 国产精品日韩在线观看| 午夜精品成人在线视频| 国产精品成人午夜| 亚洲一区不卡| 欧美新色视频| 午夜一区二区三视频在线观看| 欧美性猛交xxxx乱大交退制版 | 亚洲日本一区二区三区| 久久一综合视频| 亚洲国产导航| 欧美激情偷拍| 亚洲色在线视频| 国产精品美女久久久久久免费| 亚洲欧美日韩精品| 国产一区91| 女主播福利一区| 亚洲人成小说网站色在线| 欧美日韩高清不卡| 亚洲在线播放电影| 国产欧美精品日韩精品| 久久精品中文| 在线精品一区二区| 欧美黄色aa电影| 亚洲视频综合在线| 国产一区二区三区在线观看免费| 久久精品夜色噜噜亚洲a∨| 国产在线拍揄自揄视频不卡99| 久久激情综合网| 91久久夜色精品国产九色| 欧美激情综合五月色丁香小说 | 欧美一区二区三区四区高清| 国产美女在线精品免费观看| 久久在线视频在线| 一区二区三区四区国产| 国产欧美日韩在线观看| 久久久久高清| 在线综合亚洲| 国产一区二区精品在线观看| 免费久久99精品国产自| 一二三四社区欧美黄| 国内精品久久久久伊人av| 欧美激情国产精品| 欧美一区二区三区在线观看视频| 亚洲国产成人porn| 久久精品国产第一区二区三区| 亚洲丶国产丶欧美一区二区三区 | 欧美日韩一区二区三区四区在线观看 | 亚洲午夜精品在线| 国产一区二区中文| 欧美精品亚洲一区二区在线播放| 亚洲一区二区免费| 亚洲第一偷拍| 国产日韩一区二区三区| 欧美激情女人20p| 欧美一区二区福利在线| 亚洲免费观看高清完整版在线观看熊| 欧美a一区二区| 亚洲一区精品视频| 亚洲激情视频在线播放| 国产日韩精品一区观看| 欧美激情精品久久久久久黑人 | 国产欧美在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲午夜av电影| 亚洲日本va午夜在线影院| 欧美成人伊人久久综合网| 欧美在线视频一区| 亚洲视频精品在线| 亚洲精品自在久久| 影音欧美亚洲| 国内揄拍国内精品少妇国语| 国产精品毛片大码女人| 欧美午夜激情小视频| 欧美国产高清| 女同性一区二区三区人了人一| 久久av一区| 欧美一二三区精品| 亚洲手机视频| 亚洲色图制服丝袜| 99热免费精品在线观看| 亚洲国产精品v| 国内精品久久久久久久影视麻豆| 国产伦精品一区二区三区免费迷| 久久精品国产一区二区三区免费看| 亚洲免费激情| 亚洲伦理自拍| 亚洲国产影院| 在线日韩中文字幕| 亚洲成人在线网站| 国产综合一区二区| 狠狠色伊人亚洲综合成人| 欧美日韩在线一区二区三区| 欧美精品电影在线| 欧美日韩免费一区| 欧美护士18xxxxhd| 欧美激情网站在线观看| 欧美成人精精品一区二区频| 欧美一二三区精品| 亚洲国产精品一区二区尤物区| 亚洲国产高清视频| 亚洲国产欧美一区二区三区久久| 一区二区三区自拍| 亚洲电影免费观看高清完整版在线观看| 国外成人免费视频| 亚洲欧洲精品一区| 亚洲精品久久久蜜桃| 亚洲视频专区在线| 亚洲一区二区动漫| 久久精品在这里| 欧美高清视频www夜色资源网| 欧美日韩中文字幕日韩欧美|