python 監控logcat關鍵字功能

2022-10-04 13:39:33 字數 3607 閱讀 7133

本文主要介紹使用python呼叫adb命令實現實時監控logcat關鍵字的功能

採用多程序,可同時監控多個裝置,監控多個關鍵字。

需要配置adb環境,具體配置就不多介紹,隨便搜一下一大把,直接上**

通過乙個全域性變數控制開啟和關閉監控功能, instruction 用於根據指令獲取對應的方法名

import os, threading, datetime

# 獲取當前檔案所在目錄,拼接出log路徑

log_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "log")

# 配置需要監控的關鍵字

keywords = ["anr ", "nullpointerexception", "crash", "force closed"]

# 控制開啟和關閉

stop_logcat = true

# 指令對應具體操作

instruction =

def filter_keywords():

global stop_logcat

stop_logcat = false

devices = get_devices() # 先獲取所有連線的裝置

print("開始監控關鍵字")

for device in devices:

t = threading.thread(target=filter_keyword, args=(device,))

t.start()

def stop_filter_keywords():

global stop_logcat

if stop_logcat:

print("沒有正在執行的任務\n")

else:

程式設計客棧stop_logcat = true

print("正在停止關鍵字監控\n")

監控關鍵字主函式,

def filter_keyword(device):

print("裝置%s關鍵字監控已開啟" % str(device))

sub = logcat(device)

with sub:

for line in sub.stdout: # 子程序會持續輸出日誌,對子程序物件.stdout進行迴圈讀取

for key in keywords:

if line.decode("utf-8").find(key) != -1: # stdout輸出為位元組型別,需要轉碼

message = "裝置:%s 檢測到:%s\n" % (device, key)# 裝置:192.168.56.104:5555 檢測到:anr

path = get_log_path("bugreport") # 根據時間建立資料夾

bugreport(device, path)# 拉取完整日誌壓縮包到建立的資料夾內

send_message(message) # 這裡可以換成自己要做的事情,比如傳送郵件或釘釘通知

if stop_logcat:

break

print("裝置%s關鍵字監控已停止" % str(device))

sub.kill()

通過 subprocess.popen 建立程序程式設計客棧執行命令,持續輸出日誌到 stdout

# logcat持續輸出日誌

def logcat(device):

command = "adb -s " + str(device) + " logcat -v time"

sub = subprocess.popen(command, shell=true, stdout=subprocess.pipe, stderr=subprocess.pipe)

return sub

獲取所有已連線裝置的方法,執行"adb devices"後輸出如下,通過對命令執行拿到的字串切割獲取所有裝置號以列表方式儲存

# 獲取所有device

def get_devices():

command = "adb devices"

res = os.popen(command).read()

devices =

res = res.split("\n")

for i in res:

if i.endswith("device"):

devices.append(i.split('\t')[0])

return devices

# 打包**所有日誌到當前目錄

def bugreport(device, path):

os.chdir(path)# bugreport會**日誌到當前資料夾,所以需要先切換到已經建立的目錄

command = "adb -s " + str(device) + " bugreport"

subprocess.popen(command, shell=true, stdout=subprocess.pipe, stderr=subprocess.pipe, bufsize=-1)

print("裝置:%s 日誌路徑:%s" % (str(device程式設計客棧), path))

以  當前檔案所在目錄/年/月/日 格式獲取日程式設計客棧志路徑,如果不存在自動建立

# 獲取日誌存放路徑,如果不存在則按日期建立

def get_log_path(tag):

year = datetime.datetime.now().strftime('%y')

month = datetime.datetime.now().strftime('%m')

day = datetime.datetime.now().strftime('%d')

path = os.path.join(log_path, tag, year, month, day)

if not os.path.exists(path):

os.makedirs(path)

return path

main函式,迴圈接收指令,根據接收的指令拿到方法名,並通過eval()方法執行。

def main():

while true:

print("-" * 100)

print("1:開啟關鍵字監控\n2:停止關鍵字監控\n3:退出")

print("-" * 100)

instruction = str(input("\n\n請輸入要進行的操作號:\n"))

print("-" * 100)

while instruction not in instruction.keys():

instruction = str(input("\n\n輸入無效,請重新輸入:"))

if int(instruction) == 9:

exit() # todo 退出前需要判斷是否有正在執行的程式設計客棧monkey任務和關鍵字監控任務

eval(instruction[str(instruction)] + "()")

if __name__ == '__main__':

main()

這裡只寫了開啟日誌監控和關閉的方法,中間有些處理可以根據自己需要實現,比如檢測到關鍵字之後除了拉取所有日誌外,可以傳送郵件、釘釘之類的通知,根據自己需要去實現。

總結

python監控 python 監控服務

最近寫了乙個web測試程式,因為部署在其他地方,所以想弄個監控的程序去看服務是不是還在,要是不在好發郵件,就用python簡單的寫了乙個。當然,有的時候也要考慮到監控程序本身就掛了,或者不想監控了。首先監控指令碼是這樣,很簡單 monitor.py coding 簡單的monitor函式,主要監控乙...

python 系統監控

import yagmail import psutil def sendmail subject,contents 連線郵箱伺服器 yag yagmail.smtp user 郵箱位址 password 授權密碼 host smtp.163.com 傳送郵件 yag.send to 接收的郵箱位址...

python 視窗 Python視窗開啟和關閉

這是由if event.type pygame.keyup 處的語法錯誤引起的。開啟檔案將導致它立即關閉,但在直譯器 空閒 中執行它將顯示錯誤。只需將其更改為if event.type pygame.keyup 一切都將正常工作。在 更新 從檔案而不是直譯器 空閒 執行 不會總是開啟。最好在空閒狀態...