《自拍教程45》Python_adb实时监控Logcat日志
接上一篇:adb命令_一键截取logcat日志,
有一天, 系统稳定性开发负责人找到我,希望我能在跑android 系统monkey的时候,
实时监控logcat的输出,如果一旦发现“java.lang.NullPointerException"空指针异常,
则立刻用adb bugreport命令导出当时log压缩包出来。
准备阶段
- adb logcat -v threadtime > D:\logcat_20200310_101112.txt可以打印按线程时间log并保存到一个文件。
- 由于adb logcat命令是一个持续输出的命令,它如果没被销毁(杀进程),会一直持续截取下去。
- subprocess.Popen()类是支持通过stdout=subprocess.PIPE来持续获取输出的并按行读取。
- 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日志的更多相关文章
- 安装 log.io 实时监控 php_error 日志
Log.io 实时监控 php_error.log 日志 开启 php_error 实时监控日志的第一步,要首先开启 php_error 的功能. vi php.ini 修改 PHP 配置文件,将 ; ...
- Nginx系列4:用GoAccess实现可视化并实时监控access日志
1.ubuntu16.04安装GoAccess GoAccess下载地址:https://goaccess.io/download 安装步骤: $ wget https://tar.goaccess. ...
- nagios+logstash实时监控java日志(一)
https://blog.csdn.net/yanggd1987/article/details/64121459
- 用goaccess实现可视化并实时监控access日志
goaccess access.log -o ../html/report.html --real-time-html time-format='%H:%M:%S' --date-format=‘%d ...
- 一个小工具帮你搞定实时监控Nginx服务器
Linux运维工程师的首要职责就是保证业务7 x 24小时稳定的运行,监控Web服务器对于查看网站上发生的情况至关重要.关注最多的便是日志变动,查看实时日志文件变动大家第一反应应该是'tail -f ...
- flume学习以及ganglia(若是要监控hive日志,hive存放在/tmp/hadoop/hive.log里,只要运行过hive就会有)
python3.6hdfs的使用 https://blog.csdn.net/qq_29863961/article/details/80291654 https://pypi.org/ 官网直接搜 ...
- 《自拍教程46》Python_adb自动拍照100张
Android手机测试, 涉及照相机(Camera)应用程序的稳定性测试的用例, 需要涉及100张照片的拍照自动化测试. 准备阶段 先清理老照片,照片一般存放在/scard/DCIM目录下 adb s ...
- 《自拍教程51》Python_adb批量生成App版本表格
案例一:版本在软件研发阶段是很重要的, 不同的版本, 已修复的Bug也不一样, 所实现的功能不一样, Android终端产品正式版本发布前,项目经理除了确保系统版本确定无误外, 还会逐个验证所搭载的所 ...
- 《自拍教程52》Python_adb运行Shell脚本
Android作为一款Linux终端,肯定是支持.sh后缀的Shell脚本的运行的, 有时候测试环境准备或者长时间截取复杂的日志等,开发会给到一些Shell脚本. Shell脚本的执行的优势: 快捷高 ...
随机推荐
- Linux下重要文件
1:/etc/sysconfig/network-scripts/ifcfg-ens130 2: /etc/resolv.conf DNS配置文件 3:/etc/hosts 4:/etc/sy ...
- [LC] 48. Rotate Image
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
- jenkins配置搭建环境
1.安装及运行 (1)下载 http://updates.jenkins-ci.org/latest/jenkins.war (2)运行 两种运行方式:一种是基于tomcat.Jdk启动,一种是基于D ...
- ClassNotFoundException: org.apache.commons.logging.Log
参考: https://bbs.csdn.net/topics/392090371 omcat无法启动,报如下错误: 严重: A child container failed during start ...
- php 克隆 clone
php 克隆 clone 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值, ...
- 为啥java要使用 set ()和get()方法---封装
封装性:属性封装,方法封装,类封装,组件封装等 例如:如果属性没有封装,那么在本类对象之外创建对象后,可以直接访问属性 private关键字,只能在本类中访问,想要在外部访问私有属性,我们需要提供公有 ...
- 【转】Android Monkey 命令行可用的全部选项
常规 事件 约束限制 调试 原文参见:http://www.douban.com/note/257030384/ 常规 –help 列出简单的用法. -v 命令行的每一个 -v 将增加反馈信息的级别. ...
- kubernetes集群中的pause容器
昨天晚上搭建好了k8s多主集群,启动了一个nginx的pod,然而每启动一个pod就伴随这一个pause容器,考虑到之前在做kubelet的systemd unit文件时有见到: 1 2 3 4 5 ...
- nGrinder 介绍与安装
nGrinder是基于Grinder开源项目,但由NHN公司的nGrinder开发团队进行了重新设计和完善(所以叫做nGrinder). 它是由一个controller和连接它的多个agent组成,用 ...
- iPhone5se难逃“酱油”命运?
苹果春季新品发布会即将举行,按照惯例,只会有一些不痛不痒的产品出现,最起码,不会有革命性的爆点,今年大抵相似,最大的亮点莫过于,苹果有可能会推出一款名叫"iPhone5se"的手机 ...