《自拍教程45》Python_adb實時監控Logcat日誌

来源:https://www.cnblogs.com/zipython/archive/2020/03/18/12520873.html
-Advertisement-
Play Games

接上一篇: "adb命令_一鍵截取logcat日誌" , 有一天, 系統穩定性開發負責人找到我,希望我能在跑android 系統monkey的時候, 實時監控logcat的輸出,如果一旦發現“java.lang.NullPointerException"空指針異常, 則立刻用adb bugrepor ...


接上一篇:adb命令_一鍵截取logcat日誌
有一天, 系統穩定性開發負責人找到我,希望我能在跑android 系統monkey的時候,
實時監控logcat的輸出,如果一旦發現“java.lang.NullPointerException"空指針異常,
則立刻用adb bugreport命令導出當時log壓縮包出來。


準備階段
  1. adb logcat -v threadtime > D:\logcat_20200310_101112.txt可以列印按線程時間log並保存到一個文件。
  2. 由於adb logcat命令是一個持續輸出的命令,它如果沒被銷毀(殺進程),會一直持續截取下去。
  3. subprocess.Popen()類是支持通過stdout=subprocess.PIPE來持續獲取輸出的並按行讀取。
  4. adb bugreport只是一個命令,可以打包當時的tombstone, getprop, proc,cache等信息。

Python批處理腳本形式
# coding=utf-8

import os
import re
import subprocess

command = "adb logcat -v threadtime"  # 具體命令
keyword_reg = r".*java.lang.NullPointerException.*"  # 正則表達式

# 開始執行adb命令
p_obj = subprocess.Popen(
        args=command,
        stdin=None, stdout=subprocess.PIPE,
        stderr=subprocess.PIPE, shell=False)

# 實時監控並過濾每一行生成的日誌里的關鍵字
print("Logcat catching and filtering...")
with p_obj:
    for line in p_obj.stdout:
        if re.match(keyword_reg, line.decode("utf-8")):
            print("Found %s" % keyword_reg)
            print("running adb bugreport to pull releated logs...pls wait")
            os.system("adb bugreport")  # 導出一次bugreport log壓縮包

os.system("pause")

re模塊的匹配,查找,替換等各種操作,都只能對字元串操作。
p_obj.stdout輸出的是bytes,所以需要進行utf-8解碼後才能變成字元串。

Python面向過程函數形式
# coding=utf-8

import os
import re
import subprocess

command = "adb logcat -v threadtime"  # 具體命令
keyword_reg = r".*java.lang.NullPointerException.*"  # 正則表達式


def filter_logcat():
    # 開始執行adb命令
    p_obj = subprocess.Popen(
            args=command,
            stdin=None, stdout=subprocess.PIPE,
            stderr=subprocess.PIPE, shell=False)

    # 實時監控並過濾每一行生成的日誌里的關鍵字
    print("Logcat catching and filtering...")
    with p_obj:
        for line in p_obj.stdout:
            if re.match(keyword_reg, line.decode("utf-8")):
                print("Found %s" % keyword_reg)
                print("running adb bugreport to pull releated logs...pls wait")
                os.system("adb bugreport")  # 導出一次bugreport log壓縮包


filter_logcat()
os.system("pause")


Python面向對象形式
# coding=utf-8

import os
import re
import subprocess

command = "adb logcat -v threadtime"  # 具體命令
keyword_reg = r".*java.lang.NullPointerException.*"  # 正則表達式


class LogcatFilter(object):
    def __init__(self):
        # 開始執行adb命令
        self.p_obj = subprocess.Popen(
                args=command, stdout=subprocess.PIPE,
                stderr=subprocess.PIPE)

    def filter_logcat(self):
        # 實時監控並過濾每一行生成的日誌里的關鍵字
        print("Logcat catching and filtering...")
        with self.p_obj:
            for line in self.p_obj.stdout:
                if re.match(keyword_reg, line.decode("utf-8")):
                    print("Found %s" % keyword_reg)
                    print("running adb bugreport to pull releated logs...pls wait")
                    os.system("adb bugreport")  # 導出一次bugreport log壓縮包


if __name__ == '__main__':
    l_obj = LogcatFilter()
    l_obj.filter_logcat()
    os.system("pause")


代碼運行方式及效果

確保Android車機設備通過USB線與電腦連接了,adb設備有效連接,
以上代碼的3種實現形式都可以直接運行,比如保存為filter_logcat.py並放在桌面,
建議python filter_logcat.py運行,當然也可以雙擊運行, 效果如下:


更多更好的原創文章,請訪問官方網站:www.zipython.com
自拍教程(自動化測試Python教程,武散人編著)
原文鏈接:https://www.zipython.com/#/detail?id=389e4bab6097442a8e72e063a0eafa97
也可關註“武散人”微信訂閱號,隨時接受文章推送。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、最簡單的用戶系統 一個最簡單的用戶系統,只需要有用戶和身份驗證兩個模塊就夠了。如圖: 這裡提示一下:上層數據依賴下層數據。舉個慄子,就是身份驗證需要依賴用戶數據。 2、具有許可權管理的用戶系統 如果需要進行許可權管理的話,那麼就加上資源和角色模塊。同時,在身份認證之後需要按需進行鑒權。 資源和用戶都 ...
  • 本次過程僅供學習參考,請遵守相關法律法規。 首先我們分析網站:https://www.mzitu.com/all/ 不難發現,這個頁面上包含了大量的圖片鏈接,可以說是特別方便我們爬取圖片的,這是件好事。那麼我們繼續分析 這是第一頁的地址 這是第二頁的,所以我們爬取的時候只需要在鏈接後面增加“/num ...
  • OpenCV中的HAL方法調用流程分析 在OpenCV中有一些所謂HAL(Hardware Acceleration Layer)實現,看名字好像和硬體相關,其實也不盡然,可以理解為比常規的OCV實現更快的版本就好了。此文要做的就是要找到其實現或者切入流程,打通整個函數調用邏輯。本文將以 和`Gau ...
  • 一、Buffered 位元組方式 BufferedInputStream BufferedOutputStream 字元方式 BufferedReader BufferedWriter package com.bjpowernode.java_learning; import java.io.*; p ...
  • 導讀 前幾天發表的文章 "SpringBoot多數據源動態切換" 和 "SpringBoot整合多數據源的巨坑" 中,提到了一個坑就是動態數據源添加@Primary介面就會造成迴圈依賴異常,如下圖: 這個就是典型的構造器依賴,詳情請看上面兩篇文章,這裡不再詳細贅述了。本篇文章將會從源碼深入解析Spr ...
  • 100個不同類型的python語言趣味編程題 在求解的過程中培養編程興趣,拓展編程思維,提高編程能力。 第一部分:趣味演算法入門;第七題:最佳存款方案 假設銀行一年整存零取得月息為0.63%,現某人手中有一筆錢,他打算在今後的5年中的每年年底取出1000 元,到第五年剛好取完,請算出他存錢時應該存入多 ...
  • 文件的操作 + 打開文件 2.對文件句柄進行操作 3.關閉文件。 open() 有三個參數:1. 文件路徑 (文件夾路徑+文件名+文件類型) 2. 編碼方式(encoding)3. 模式(mode) open: 內置函數,open底層調用的是操作系統的介面。 fl: 變數,一般在文件操作時設置的約定 ...
  • 1.使用虛擬環境 創建虛擬環境 conda create -n tfpy3 python=3.5 激活tfpy3虛擬環境 activate tfpy3 安裝ipykernel 插件 pip/conda install ipykernel 將環境添加到Jyputer中(Name是此環境顯示在Jyput ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...