Heim  >  Artikel  >  Backend-Entwicklung  >  Überwachen Sie Python-Logcat-Schlüsselwörter

Überwachen Sie Python-Logcat-Schlüsselwörter

coldplay.xixi
coldplay.xixinach vorne
2020-09-04 17:05:453258Durchsuche

Verwandte Lernempfehlungen: Python-Tutorial können gleichzeitig überwacht werden.

Überwachen Sie Python-Logcat-SchlüsselwörterSie müssen die ADB-Umgebung konfigurieren. Ich werde nicht viel suchen und direkt zum Code gehen.

Steuern Sie die Überwachungsfunktion über eine globale Variable Methodenname gemäß der Anweisung

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 = {
               "1": "filter_keywords",
               "2": "stop_filter_keywords",
               "3": "exit"
               }


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")
Hauptfunktion des Schlüsselworts überwachen,
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()
erstellt einen Prozess zum Ausführen von Befehlen über subprocess.Popen und gibt kontinuierlich Protokolle an stdout aus
# 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

Methode zum Abrufen aller angeschlossenen Geräte nach der Ausführung von „adb devices“. Die Ausgabe lautet wie folgt und wird durch Ausführen des Befehls „String Cutting“ erhalten, um alle Gerätenummern zu erhalten und in Listenform zu speichern. Wenn es nicht vorhanden ist, wird automatisch die

# 获取所有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

Hauptfunktion erstellt, die Anweisungen entsprechend den empfangenen Anweisungen empfängt. Die Anweisung erhält den Methodennamen und führt ihn über die Methode eval() aus.

# 打包下载所有日志到当前目录
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))

Der Code ist nach der Segmentierung etwas chaotisch, Sie können den Code in eine Datei kopieren und zum Verständnis streicheln.

Wenn Sie mehr über die Programmierung erfahren möchten, achten Sie bitte darauf die Kolumne

php-Training

!

Das obige ist der detaillierte Inhalt vonÜberwachen Sie Python-Logcat-Schlüsselwörter. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen