之前調(diào)試線上程序時壤靶,經(jīng)常遇到的一個問題就是缚俏,線上程序出現(xiàn)bug,但線下調(diào)試時卻無法重現(xiàn),或者說想重現(xiàn)需要的準備條件很繁瑣忧换。所以我就想恬惯,能不能在線上程序出現(xiàn)問題時,直接切入程序亚茬,實時看到程序內(nèi)部狀況酪耳,數(shù)據(jù)到底是什么樣的。
本著這個目標刹缝,我開發(fā)了一個簡單的console接口碗暗,通過繼承抽象類的方式來保證程序提供一個命令行式交互界面,實時動態(tài)的監(jiān)控調(diào)整正在運行的程序梢夯。
先寫個例子簡單演示一下:
創(chuàng)建test_console.py言疗,編寫如下代碼
執(zhí)行
python test_consoler.py
執(zhí)行情況如下:
再開一個窗口噪奄,執(zhí)行
python test_consoler.py --console
回到剛才的窗口
原程序的行為被改變了勤篮!
厲害了word哥!
回到命令行交互頁面
命令行現(xiàn)在所處的作用域為init
那么init中的所有本地變量均可以訪問
通過self,我們可以改變self綁定的方法及self屬性
使用exit或者control + c退出
讓我們來看一下console類
consoler.py
console類是一個單例抽象類涤垫,為什么是單例主要是因為console類我主要用于maxin到我的微服務(wù)類姑尺,所以必須是單例且抽象。
需要實現(xiàn)一個抽象屬性args蝠猬,args是ArgumentParser是結(jié)果集切蟋。
所以可以通過如下方式使用。
console主要做的事情有兩件
- 開啟一個console服務(wù)
- 開啟一個console客戶端
當啟動程序時不加--console參數(shù)時柄粹,默認啟動一個線程服務(wù)來監(jiān)聽console客戶端的鏈接。
當啟動程序時添加了--console參數(shù)時匆绣,程序開啟一個console并連接服務(wù)驻右。
該console類已經(jīng)被maxin進了monitors.py中的微服務(wù)基類中,可以直接繼承使用
靈感來源于werkzeug中關(guān)于debug中間件的實現(xiàn)堪夭。