Python 안 드 로 이 드 장치 cpu 와 메모리 사용량 가 져 오기
환경:python 과 adb
사용 방법:adb 를 사용 하여 안 드 로 이 드 장 치 를 연결 하고 테스트 할 app 을 열 어 cpu/메모리 코드 를 실행 합 니 다.
cpu 가 져 오기 코드 는 다음 과 같 습 니 다.(스 크 립 트 실행 시간 으로 인 자 를 입력 하 십시오)
# coding:utf-8
'''
total cpu
'''
import os, csv
import time
import csv
import numpy as np
from matplotlib import pyplot as plt
cpu_list = []
time_list = []
app_list = []
lines = []
package_name = []
# ( )
def get_applist():
global package_name
with open('config/director.txt', encoding='utf-8', mode='r') as f:
lines_all = f.readlines()
for appname in lines_all:
package_name1 = appname
appname_new = appname[0:15]
package_name.append(package_name1)
lines.append(appname_new)
for line in lines:
app_list.append(line.strip())
# cpu
def get_cpu():
global filename
with open(filename, encoding="utf-8", mode="r") as f:
lines = f.readlines()
for appname in app_list:
for lis in lines:
#
if appname in lis and '%' in lis:
now = time.strftime("%H:%M:%S", time.localtime())
time_list.append(now)
cpu_1 = lis.split('%')[0]
cpu_2 = cpu_1.split(' ')
# print(cpu_2)
cpu = cpu_2[len(cpu_2) - 1]
print(cpu, now)
cpu_list.append(cpu)
break
#
elif appname in lis:
now = time.strftime("%H:%M:%S", time.localtime())
time_list.append(now)
cpu1 = lis.split(' ')
# print(cpu1)
cpu2 = list(set(cpu1))
cpu2.sort(key=cpu1.index)
cpu_h = cpu2[len(cpu2) - 4]
print(cpu_h, now)
cpu_list.append(cpu_h)
break
else:
pass
# csv
def write_head():
headers = ['name:']
headers.append(app_list[0])
headers.append('init_cpu')
with open('log_su/cpuinfo.csv', 'w+', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=headers)
writer.writeheader()
# csv,
def write_report():
# headers = ['name', 'aaa', 'init_cpu']
with open('log_su/cpuinfo.csv', 'a+', newline='') as csvfile:
writer = csv.writer(csvfile)
for key in cpu_list:
writer.writerow([' ', ' ', key])
# ,
def mapping():
filename = 'log_su/cpuinfo.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
highs = []
for row in reader:
high = row[2]
highs.append(high)
# print(highs)
wights = time_list
highs_float = list(map(float, highs))
# print(f"****{highs}")
print(f"CPU :{highs_float}")
#
total = 0
for value in highs_float:
total += value
average = round(total/len(highs_float), 2)
print(f"CPU :{average}")
#
highs_hl = sorted(highs_float)
print(f"CPU :{highs_hl[0]}")
print(f"CPU :{highs_hl[len(highs_hl)-1]}")
#
plt.figure(figsize=(11, 4), dpi=600)
#
# plt.grid()
plt.grid(axis="y")
#
if package_name[0] == 'com.oneapp.max.security.pro.cn':
plt.plot(wights, highs_float, "c-", linewidth=1, label="PPP")
elif package_name[0] == 'com.oneapp.max.cn':
plt.plot(wights, highs_float, "c-", linewidth=1, label="Opt1.6.1")
elif package_name[0] == 'com.boost.clean.coin.cn':
plt.plot(wights, highs_float, "c-", linewidth=1, label="Fastclear")
elif package_name[0] == 'com.walk.sports.cn':
plt.plot(wights, highs_float, "c-", linewidth=1, label="Walk")
elif package_name[0] == 'com.diamond.coin.cn':
plt.plot(wights, highs_float, "c-", linewidth=1, label="Amber")
elif package_name[0] == 'com.oneapp.max.cleaner.booster.cn':
plt.plot(wights, highs_float, "c-", linewidth=1, label="Space")
else:
plt.plot(wights, highs_float, "c-", linewidth=1, label=package_name[0])
#
# plt.ylim(300, 400)
# plt.xlim(0, 10)
plt.xlabel('time(H:Min:S)', fontsize=16)
plt.ylabel("cpu_realtime(%)", fontsize=16)
plt.title("cpu real time line chart", fontsize=24)
plt.legend()
#
if len(wights) <= 15:
pass
else:
t = int(len(wights) / 15)
plt.xticks(range(0, len(wights), t))
#
# plt.yticks(range(100, 300, 10))
#
plt.gcf().autofmt_xdate()
#
# for a, b in zip(wights, highs_float):
# plt.text(a, b, (a, b), ha='center', va='bottom', fontsize=8)
# plt.show()
time_now = time.strftime("%m%d-%H:%M:%S", time.localtime())
path = "report/" + time_now
plt.savefig(path)
#
def name_app():
cmd = 'adb shell dumpsys window | grep mCurrentFocus > log_su/name_info.csv'
os.system(cmd)
with open('log_su/name_info.csv', encoding='utf-8', mode='r') as f:
lines = f.readlines()
for line in lines:
if 'mCurrentFocus' in line:
name1 = line.split('/')[0].split(' ')
name = name1[len(name1) - 1]
with open('config/director.txt', encoding='utf-8', mode='w') as f_name:
text = name
f_name.write(text)
print(f" :{text}")
#
def time_control():
global filename
while True:
end_time = time.time()
if (end_time - start_time)/60 >= tol_time: #
# if end_time - start_time >= tol_time: #
break
time.sleep(1)
adb = "adb shell top -n 1 > log_su/adb_info.csv"
d = os.system(adb)
filename = "log_su/adb_info.csv"
get_cpu()
if __name__ == "__main__":
name_app()
tol_time = int(input(" ( ):"))
start_time = time.time()
get_applist()
write_head()
time_control()
write_report()
mapping()
.py 파일 동급 디 렉 터 리 에 3 개의 폴 더,config,log 를 생 성 합 니 다.su,report,그 중 실행 결 과 는 report 에 있 습 니 다.결 과 는 접선 도 를 생 성 하 는 것 으로 직관 적 으로 보인다.다음 과 같다.
여기 서 제 가 설명 하 겠 습 니 다.cpu 가 차지 하 는 비율 은 adb 가 얻 은 실시 간 비례 입 니 다.그러나 만 치 는 반드시 100%가 아 닙 니 다.예 를 들 어 이 그림 은 8 핵 핸드폰 을 사용 하기 때문에 CPU 의 만 치 는 800%입 니 다.
메모리 가 져 오기 코드 는 다음 과 같 습 니 다.(스 크 립 트 실행 시간 으로 파 라 메 터 를 입력 하 십시오)
# coding:utf-8
'''
total memory
'''
import os, csv
import time
import csv
import numpy as np
from matplotlib import pyplot as plt
mem_dict = {}
time_list = []
app_list = []
package_name = []
t = 0
def get_applist():
global package_name
with open('config/director.txt', encoding='utf-8', mode='r') as f:
lines = f.readlines()
for line in lines:
package_name1 = line
package_name.append(package_name1)
app_list.append(line.strip())
def get_mem():
global filename
with open(filename, encoding="utf-8", mode="r") as f:
lines = f.readlines()
start_flag = False
for appname in app_list:
for line in lines:
if "Total PSS by OOM adjustment" in line:
break
if appname in line and 'pid' in line and 'kB' in line:
mem_v = line.strip().split(':')[0].replace('kB', '').replace(',', '')
line_name = line.split(':')[1].split('(')[0].strip()
if line_name in appname:
mem_v = round(float(mem_v) / 1024, 2)
mem_dict[appname] = mem_v
now_v = time.strftime("%H:%M:%S", time.localtime())
# now_int = int(now_v)
time_list.append(now_v)
print(mem_v, now_v)
break
elif appname in line and 'pid' in line and 'K' in line:
mem_v = line.strip().split(':')[0].replace('K', '').replace(',', '')
line_name = line.split(':')[1].split('(')[0].strip()
if line_name in appname:
mem_v = round(float(mem_v) / 1024, 2)
mem_dict[appname] = mem_v
now_v = time.strftime("%H:%M:%S", time.localtime())
# now_int = int(now_v)
time_list.append(now_v)
print(mem_v, now_v)
break
def write_head():
headers = ['name:']
headers.append(app_list[0])
headers.append('init_mem')
with open('log_su/meminfo.csv', 'w+', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=headers)
writer.writeheader()
def write_report():
headers = ['name','aaa', 'init_mem']
with open('log_su/meminfo.csv', 'a+', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=headers)
for key in mem_dict:
writer.writerow({'init_mem': mem_dict[key]})
def mapping():
filename = 'log_su/meminfo.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
highs = []
for row in reader:
high = row[2]
highs.append(high)
# print(highs)
wights = time_list
highs_float = list(map(float, highs))
print(f" :{highs_float}")
#
total = 0
for value in highs_float:
total += value
average = round(total / len(highs_float), 2)
print(f" :{average}")
#
highs_hl = sorted(highs_float)
print(f" :{highs_hl[0]}")
print(f" :{highs_hl[len(highs_hl) - 1]}")
#
plt.figure(figsize=(11, 4), dpi=600)
#
# plt.grid()
plt.grid(axis="y")
if package_name[0] == 'com.oneapp.max.security.pro.cn':
plt.plot(wights, highs_float, "c-", linewidth=1, label="PPP")
elif package_name[0] == 'com.oneapp.max.cn':
plt.plot(wights, highs_float, "c-", linewidth=1, label="Opt")
elif package_name[0] == 'com.boost.clean.coin.cn':
plt.plot(wights, highs_float, "c-", linewidth=1, label="fastclear")
elif package_name[0] == 'com.walk.sports.cn':
plt.plot(wights, highs_float, "c-", linewidth=1, label="Walk")
elif package_name[0] == 'com.diamond.coin.cn':
plt.plot(wights, highs_float, "c-", linewidth=1, label="Amber")
elif package_name[0] == 'com.oneapp.max.cleaner.booster.cn':
plt.plot(wights, highs_float, "c-", linewidth=1, label="Space")
else:
plt.plot(wights, highs_float, "c-", linewidth=1, label=package_name[0])
#
# plt.ylim(300, 400)
# plt.xlim(0, 10)
plt.xlabel('time(H:Min:S)', fontsize=16)
plt.ylabel("Number (Mb)", fontsize=16)
plt.title("meminfo", fontsize=24)
plt.legend()
#
if len(wights) <= 15:
pass
else:
t = int(len(wights) / 15)
plt.xticks(range(0, len(wights), t))
#
# my_y_ticks = np.arange(300, 400, 10)
# my_x_ticks = np.arange(1, 10, 1)
# plt.xticks(my_x_ticks)
# plt.yticks(my_y_ticks)
# plt.yticks(range(100, 300, 10))
#
plt.gcf().autofmt_xdate()
#
# for a, b in zip(wights, highs_float):
# plt.text(a, b, (a, b), ha='center', va='bottom', fontsize=8)
# plt.show()
time_now = time.strftime("%m%d-%H:%M:%S", time.localtime())
path = "report/" + time_now
plt.savefig(path)
def name_app():
cmd = 'adb shell dumpsys window | grep mCurrentFocus > log_su/name_info.csv'
os.system(cmd)
with open('log_su/name_info.csv', encoding='utf-8', mode='r') as f:
lines = f.readlines()
for line in lines:
if 'mCurrentFocus' in line:
name1 = line.split('/')[0].split(' ')
name = name1[len(name1) - 1]
with open('config/director.txt', encoding='utf-8', mode='w') as f_name:
text = name
f_name.write(text)
print(f" :{text}")
def time_control():
global filename
while True:
end_time = time.time()
if (end_time - start_time)/60 >= tol_time: #
# if end_time - start_time >= tol_time: #
break
# time.sleep(2)
# filename = str(input(" :"))
adb = "adb shell dumpsys meminfo > log_su/adb_info.csv"
d = os.system(adb)
filename = "log_su/adb_info.csv"
get_mem()
write_report()
if __name__ == "__main__":
name_app()
tol_time = int(input(" ( ):"))
start_time = time.time()
get_applist()
write_head()
time_control()
mapping()
.py 파일 동급 디 렉 터 리 에 3 개의 폴 더,config,log 를 생 성 합 니 다.su,report,그 중 실행 결 과 는 report 에 있 습 니 다.생 성 된 메모리 결과 그림 은 다음 과 같 습 니 다.
파 이 썬 이 안 드 로 이 드 장치 cpu 와 메모리 사용량 을 가 져 오 는 상황 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 이 안 드 로 이 드 장치 내용 을 가 져 오 는 것 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.