一、获取app cpu占用情况
1、实现代码
import os,csv import time import numpy as np from matplotlib import pyplot as plt from check_package import check_package import math cpu_list=[] time_list=[] adress='app' package_name,activity=check_package(adress) # 写入表头 def write_head(): headers = [] headers.append('time') headers.append('init_cpu') with open('pack/files/cpuinfo.csv','w+',newline='') as f: writer = csv.DictWriter(f,fieldnames=headers) writer.writeheader() # 控制获取cpu时间 def time_control(): while True: end_time = time.time() # 通过开始时间和结束时间计算时间差判断是否在输入的时间内,超过输入时间则结束获取cpu值 if (end_time-start_time)/60>=total_time: break # 检测一次某app的cpu占用情况 adb = 'adb shell top -n 1 > pack/files/cpu_adb_info.csv' d = os.system(adb) get_cpu() # 获取cpu def get_cpu(): with open('pack/files/cpu_adb_info.csv',encoding='utf-8',mode='r') as f: lines = f.readlines() for line in lines: # 适配低版本手机 # 判断包名是否在行字符串中 if package_name[0:15] in line and '%' in line: now = time.strftime('%H:%M:%S',time.localtime()) time_list.append(now) cpu_1=line.split('%')[0] cpu_2=cpu_1.split(' ') cpu = cpu_2[len(cpu_2)-1] cpu_list.append(cpu) break # 适配高版本手机 elif package_name[0:15] in line: now = time.strftime('%H:%M:%S',time.localtime()) time_list.append(now) cpu_data = line.split(' ') cpu_data = list(filter(None,cpu_data)) cpu = cpu_data[-4] cpu_list.append(cpu) break else: pass # 将数据写入csv def write_report(): with open('pack/files/cpuinfo.csv','a+',newline='') as f: writer = csv.writer(f) for i in range(0,len(cpu_list)): writer.writerow([time_list[i],cpu_list[i]]) print('数据插入成功') # 绘制折线图 def mapping(): hights = cpu_list # 将cpu值转换为浮点类型数据 hights_float = list(map(float,hights)) wights = time_list total=0 for hight in hights_float: total+=hight ave = round(total/len(hights_float),2) # 计算cpu最高值和最低值 sort_hights_float = sorted(hights_float) max_hight = round(sort_hights_float[0],2) min_hight = round(sort_hights_float[-1],2) print('最大值为:%.2f,最小值为%.2f,平均值为%.2f'%(max_hight,min_hight,ave)) # 根据数据绘制图形 # 创建自定义图像 plt.figure(figsize=(11,4),dpi=600) # 生成网格,只展示y轴 plt.grid(axis='y') # 绘制折线图 plt.plot(wights,hights_float,'c-',linewidth=1,label=app_name) # 设置坐标轴范围 plt.xlabel('time(H:Min:S)',fontsize=16) plt.ylabel('cpu_realtime(%)',fontsize=16) plt.title('{} cpu occupation'.format(app_name),fontsize=24) # 显示label plt.legend() # 横坐标显示间隔 # 进行时间列表去重 wights = list(set(wights)) if len(wights)<=15: pass else: t = int(len(wights)/15) # 显示x轴的刻标,以时间间隔t展示 plt.xticks(range(0,len(wights),t)) # 旋转横坐标日期 plt.gcf().autofmt_xdate() time_now = time.strftime('%H:%M:%S',time.localtime()) save_path = 'pack/pictures/'+'{}_cpu_occupation_'.format(app_name)+ time_now plt.savefig(save_path) if __name__=='__main__': total_time = math.ceil(float(input('请输入脚本执行时间(分钟):'))) app_name = input('请输入app名称:') start_time = time.time() write_head() time_control() write_report() mapping()
二、cpu占用情况运行结果(曲线图)
二、获取app内存占用
1、实现代码
import os,csv import time import numpy as np from matplotlib import pyplot as plt from check_package import check_package import math mem_list=[] time_list=[] adress='app' package_name,activity=check_package(adress) # 写入表头 def write_head(): headers = [] headers.append('time') headers.append('init_mem') with open('pack/files/meminfo.csv','w+',newline='') as f: writer = csv.DictWriter(f,fieldnames=headers) writer.writeheader() # 获取内存 def get_mem(): with open('pack/files/mem_adb_info.csv',encoding='utf-8',mode='r') as f: lines = f.readlines() for line in lines: if 'TOTAL' in line and 'PSS' not in line: now = time.strftime('%H:%M:%S',time.localtime()) time_list.append(now) mem_data = line.split(' ') # 过滤掉列表中的空字符串 mem_data=list(filter(None,mem_data)) mem = round(int(mem_data[1])/1024,2) mem_list.append(mem) # 控制获取mem时间 def time_control(): while True: end_time = time.time() # 通过开始时间和结束时间计算时间差判断是否在输入的时间内,超过输入时间则结束获取cpu值 if (end_time-start_time)/60>=total_time: break # 检测一次某app的内存占用情况 adb = 'adb shell dumpsys meminfo {} > pack/files/mem_adb_info.csv'.format(package_name) d = os.system(adb) get_mem() # 将数据写入csv def write_report(): with open('pack/files/meminfo.csv','a+',newline='') as f: writer = csv.writer(f) for i in range(0,len(mem_list)): writer.writerow([time_list[i],mem_list[i]]) print('数据插入成功') # 绘制折线图 def mapping(): hights = mem_list # 将mem值转换为浮点类型数据 hights_float = list(map(float,hights)) wights = time_list total=0 for hight in hights_float: total+=hight ave = round(total/len(hights_float),2) # 计算mem最高值和最低值 sort_hights_float = sorted(hights_float) max_hight = round(sort_hights_float[0],2) min_hight = round(sort_hights_float[-1],2) print('最大值为:%.2f,最小值为%.2f,平均值为%.2f'%(max_hight,min_hight,ave)) # 根据数据绘制图形 # 创建自定义图像 plt.figure(figsize=(11,4),dpi=600) # 生成网格,只展示y轴 plt.grid(axis='y') # 绘制折线图 plt.plot(wights,hights_float,'c-',linewidth=1,label=app_name) # 设置坐标轴范围 plt.xlabel('time(H:Min:S)',fontsize=16) plt.ylabel('cpu_realtime(%)',fontsize=16) plt.title('{} mem occupation'.format(app_name),fontsize=24) # 显示label plt.legend() # 横坐标显示间隔 # 进行时间列表去重 wights = list(set(wights)) if len(wights)<=15: pass else: t = int(len(wights)/15) # 显示x轴的刻标,以时间间隔t展示 plt.xticks(range(0,len(wights),t)) # 旋转横坐标日期 plt.gcf().autofmt_xdate() time_now = time.strftime('%H:%M:%S',time.localtime()) save_path = 'pack/pictures/'+'{}_mem_occupation_'.format(app_name)+ time_now plt.savefig(save_path) if __name__=='__main__': total_time = math.ceil(float(input('请输入脚本执行时间(分钟):'))) app_name = input('请输入app名称:') start_time = time.time() write_head() time_control() write_report() mapping()
2、内存占用运行结果(曲线图)
标签:python,app,float,list,hights,mem,time,cpu From: https://www.cnblogs.com/lxmtx/p/17072323.html