本文主要介绍使用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 = {"1": "filter_keywords","2": "stop_filter_keywords","3": "exit"}def filter_keywords():global STOP_LOGCATSTOP_LOGCAT = Falsedevices = get_devices()  # 先获取所有连接的设备print("开始监控关键字")for device in devices:t = threading.Thread(target=filter_keyword, args=(device,))t.start()def stop_filter_keywords():global STOP_LOGCATif STOP_LOGCAT:print("没有正在执行的任务\n")else:STOP_LOGCAT = Trueprint("正在停止关键字监控\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 检测到:ANRpath = get_log_path("bugreport") # 根据时间创建文件夹bugreport(device, path)# 拉取完整日志压缩包到创建的文件夹内send_message(message) # 这里可以换成自己要做的事情,比如发送邮件或钉钉通知if STOP_LOGCAT:breakprint("设备%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 监控logcat关键字相关推荐

  1. python监控windows日志_Python 监控日志的简单示例

    这篇文章主要为大家详细介绍了Python 监控日志的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 一个简易的 ...

  2. python 监控_了解指标并使用Python进行监控

    python 监控 当我第一次遇到counter和gauge以及带有颜色和数字的图表时,我的React是避免使用该图表,这些图表的颜色和数字分别标记为"平均"和" 90以 ...

  3. Python监控目录文件夹,并使用SFTP上传目录及文件到linux服务器

    Python 扫描监控本地文件夹并进行超大文件上传 方案1:WebUploader大文件分块多线程并发上传 方案2:watchdog目录文件夹监控,paramiko STFP上传服务器 方案3:优化2 ...

  4. python键盘输入代码,python监控键盘输入实例代码

    本文研究的主要是python监控键盘输入的相关代码,用到了os,sys,time等,具体实现代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- im ...

  5. Python监控目录和文件变化

    原文:https://www.cnblogs.com/lcamry/p/8392376.html Python监控目录和文件变化 一.os.listdir import os, time path_t ...

  6. 以下哪个不是python中的关键字-以下不是python中的关键字

    [单选题]直径数字前应加符号( ) [单选题]Python 中对变量描述错误的选项是: [填空题]近头者为 [单选题]以下对 Python 程序缩进格式描述错误的选项是 [单选题]关于Python语言 ...

  7. python监控进程状态_python监控进程脚本

    本文实例为大家分享了python监控进程脚本的具体代码,供大家参考,具体内容如下 原理: 监控一个指定进程,每隔5秒钟获取其CPU.内存使用量超过60%即kill掉该进程,获取其句柄数,超过300也k ...

  8. python里的关键字有哪些_Python 中的关键字有哪些?

    在Python中,具有特殊功能的标识符称为关键字.关键字是Python语言自己已经使用的了,不允许开发者自己定义和关键字相同名字的标识符.Python中的关键字如下所示: Falsedefifrais ...

  9. python多行注释符号_python知识学习,python标识符和关键字

    python标识符和关键字 标识符和关键字都是之中具有某种意义的标记和称谓,就像人的外号一样.所谓的标识符就是代码的分号.单引号.双引号等等就是标识符,而代码中的if.for等等就是关键字. pyth ...

最新文章

  1. 工厂方法模式与抽象工厂模式的区别
  2. 常见的DNS攻击——偷(劫持)、骗(缓存投毒)、打(DDos)
  3. 怎么选择数据服务器?请记住这五条
  4. 19、HTML5 新的 Input 类型
  5. 兼容ie浏览器的placeholder的几种方法
  6. 【javascript】异步编年史,从“纯回调”到Promise
  7. I帧、B帧和P帧的特点和编码的基本流程
  8. 终于要来了!苹果明年将推出11英寸版mini-LED屏iPad Pro
  9. pb程序怎么发布到iis_怎么使用抖音小程序第三方平台系统开发制作发布抖音小程序+教程...
  10. Tensorflow中的tf.keras库
  11. Git(11)-- Git 别名(alias)
  12. Cookie、Session、Token、RefreshToken
  13. 我的世界java版刷雪球机,我的世界怎么无限得到雪球 刷雪球机介绍
  14. QM 、QA和QC的区别
  15. Android百度地图(地位和POI附近搜索)-仿微信、QQ地理位置的分享
  16. 卡特兰数 默慈金数 默慈金三角形 反射原理
  17. 设计一个名为 MyRectangle 的矩形类来表示矩形
  18. Android自定义安全键盘
  19. 使用markdown编辑器
  20. 51单片机C语言波特率十六进制,8051单片机波特率计算公式(配套C语言例程)

热门文章

  1. BERT 的 PyTorch 实现(超详细)
  2. 在谈“细节决定成败”
  3. Adobe Illustrator设计网页
  4. Android 基础 View 系列之 仿IPhone 开关控件
  5. android os仿ios,安卓机和iOS系统结合?再也不用去下高仿的iOS主题了
  6. SecureCRT 5.1注册码
  7. 2022-2028年中国云制造行业深度调研及投资前景预测报告
  8. 施耐德电气美国研发中心揭秘之旅
  9. 1800个python词汇_基本 Python 词汇
  10. 利用Appuploader上架IPA步骤