接上一篇: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

也可关注“武散人”微信订阅号,随时接受文章推送。

《自拍教程45》Python_adb实时监控Logcat日志的更多相关文章

  1. 安装 log.io 实时监控 php_error 日志

    Log.io 实时监控 php_error.log 日志 开启 php_error 实时监控日志的第一步,要首先开启 php_error 的功能. vi php.ini 修改 PHP 配置文件,将 ; ...

  2. Nginx系列4:用GoAccess实现可视化并实时监控access日志

    1.ubuntu16.04安装GoAccess GoAccess下载地址:https://goaccess.io/download 安装步骤: $ wget https://tar.goaccess. ...

  3. nagios+logstash实时监控java日志(一)

    https://blog.csdn.net/yanggd1987/article/details/64121459

  4. 用goaccess实现可视化并实时监控access日志

    goaccess access.log -o ../html/report.html --real-time-html time-format='%H:%M:%S' --date-format=‘%d ...

  5. 一个小工具帮你搞定实时监控Nginx服务器

    Linux运维工程师的首要职责就是保证业务7 x 24小时稳定的运行,监控Web服务器对于查看网站上发生的情况至关重要.关注最多的便是日志变动,查看实时日志文件变动大家第一反应应该是'tail -f ...

  6. flume学习以及ganglia(若是要监控hive日志,hive存放在/tmp/hadoop/hive.log里,只要运行过hive就会有)

    python3.6hdfs的使用 https://blog.csdn.net/qq_29863961/article/details/80291654 https://pypi.org/  官网直接搜 ...

  7. 《自拍教程46》Python_adb自动拍照100张

    Android手机测试, 涉及照相机(Camera)应用程序的稳定性测试的用例, 需要涉及100张照片的拍照自动化测试. 准备阶段 先清理老照片,照片一般存放在/scard/DCIM目录下 adb s ...

  8. 《自拍教程51》Python_adb批量生成App版本表格

    案例一:版本在软件研发阶段是很重要的, 不同的版本, 已修复的Bug也不一样, 所实现的功能不一样, Android终端产品正式版本发布前,项目经理除了确保系统版本确定无误外, 还会逐个验证所搭载的所 ...

  9. 《自拍教程52》Python_adb运行Shell脚本

    Android作为一款Linux终端,肯定是支持.sh后缀的Shell脚本的运行的, 有时候测试环境准备或者长时间截取复杂的日志等,开发会给到一些Shell脚本. Shell脚本的执行的优势: 快捷高 ...

随机推荐

  1. Dubbo的集群容错与负载均衡策略

    Dubbo的集群容错策略 正常情况下,当我们进行系统设计时候,不仅要考虑正常逻辑下代码该如何走,还要考虑异常情况下代码逻辑应该怎么走.当服务消费方调用服务提供方的服务出现错误时候,Dubbo提供了多种 ...

  2. appium ios真机自动化环境搭建&运行(送源码)

    appium ios真机自动化环境搭建&运行(送源码) 原创: f i n  测试开发社区  6天前 Appium测试环境的搭建相对比较烦琐,不少初学者在此走过不少弯路 首先是熟悉Mac的使用 ...

  3. Appium移动自动化测试实例-基于python

    一.环境搭建 安装Android 环境变量.SDK.Android API.ADT等. 步骤1  安装SDK:下载地址为https://pan.baidu.com/s/1mi6PT9m.如提示错误:' ...

  4. python返回值进行unpack

    最近在写yolov3,因为yolov3的多输出性质,所以我打算写适配多输出的工具函数,在numpy中可以在一个array中包含多个不同维度的array,但在tensorflow中一个tensor只能保 ...

  5. Android编程权威指南第三版 第32章

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_35564145/article/de ...

  6. 查漏补缺:Linux进程与线程的区别

    1.概念的区别 进程:是具有独立功能的程序在一个数据集合上运行的过程,是系统进行资源分配的基本单位,也是调度运行的基本单位.一个进程中可以包含多个线程. 线程:是进程的一个实体,是CPU调度和分派的基 ...

  7. 机器学习 —— 数据预处理

    对于学习机器学习算法来说,肯定会涉及到数据的处理,因此一开始,对数据的预处理进行学习 对于数据的预处理,大概有如下几步: 步骤1 -- 导入所需库 导入处理数据所需要的python库,有如下两个库是非 ...

  8. webpack 手动创建项目

    前言: webpack作为当前算是比较流行的打包工具之一,通过设置入口文件开始会把入口文件所依赖的所有文件(js,css,image等)进行对应的打包处理,其实现当时真的是很独特.现在流行的脚手架工具 ...

  9. #2020.1.26笔记——springdatajpa

    2020.1.26笔记--springdatajpa 使用jpa的步骤: 1. 导入maven坐标 <?xml version="1.0" encoding="UT ...

  10. celery异步任务框架

    目录 Celery 一.官方 二.Celery异步任务框架 Celery架构图 消息中间件 任务执行单元 任务结果存储 三.使用场景 四.Celery的安装配置 五.两种celery任务结构:提倡用包 ...