Python脚本实现启停app获取资源占比信息

这个脚本在启动app进行左右划简单操作时,启动两个线程同时获取CPU和内存使用情况,然后要把得到的数据存放在本地CSV文件中。这就要使用到threading模块和CSV模块。

 

# -*- coding=utf-8 -*-

import os
import threading as trg
import time
import csv




#启动app
def start_app():
    getcmd = os.popen('adb shell am start -W -n com.ss.android.article.video/.activity.MainActivity')
   # print(getcmd.read())
   # print(type(getcmd))
    for line in getcmd.readlines():
        if 'ThisTime' in line:
            start_time =  line.split(':')[1]
          #  print(start_time)
          #  print(type(start_time))
            break
    savedata_to_csv(start_time, 'starttime.csv')


#停止app
def stop_app():
    os.system('adb shell am force-stop com.ss.android.article.video')



#获取CPU信息
def get_cpuinfo():
    getcmd = os.popen('adb shell dumpsys cpuinfo|findstr com.ss.android.article.video').read()
   #print(getcmd)
    if 'com.ss.android.article.video'in getcmd:
        cpuinfo = getcmd.split('%')[0]
       # print(cpuinfo)
      #  print(type(cpuinfo))
    savedata_to_csv(cpuinfo, 'cpuinfo.csv')

#向左划
def move_lafe():
    os.system('adb shell input swipe 600 800 100 800 200')

#向右划
def move_right():
    os.system('adb shell input swipe 100 800 600 800 200')

#获取内存信息
def get_meminfo():
    getcmd = os.popen('adb shell dumpsys meminfo|findstr com.ss.android.article.video').read()
    #print(getcmd)
   # print(type(getcmd))
    if 'com.ss.android.article.video' in getcmd:
        meminfo = getcmd.split(':')[0]
#        print(meminfo)
#        print(type(meminfo))
    savedata_to_csv(meminfo, 'meminfo.csv')

#保存数据到csv
def savedata_to_csv(data,createcsv):
    csvfile = open(createcsv,'a', newline='\n')
    csv_writer = csv.writer(csvfile)
    csv_writer.writerow([data])
    csvfile.close()


#从这开始
if  __name__ == '__main__':
    runtimes = input('Please Enter runtimes:') #确定运行次数

    try:
        runtimes = int(runtimes)#检测输入是否为数字
        while runtimes > 0:#运行
            cpuget = trg.Thread(target=get_cpuinfo)
            memget = trg.Thread(target=get_meminfo)
            runtimes -= 1
            print('%s times will be running ' % runtimes)
            start_app()
            time.sleep(9)
            move_lafe()
            time.sleep(0.5)
            move_right()
            cpuget.start()
            memget.start()
            memget.join()
            cpuget.join()
            stop_app()
            time.sleep(3)
        print('finish')
    except:
        print('Your enter is Err,pls enter number')

在使用过程中遇到问题:

1.使用csv储存时,出现一个字符占一个格子的情况。代码如下:

def savedata_to_csv(data,createcsv):
    csvfile = open(createcsv,'a', newline='\n')
    csv_writer = csv.writer(csvfile)
    csv_writer.writerow(data)
    csvfile.close()

解决方法:

csv_writer.writerow(data)的括号中给data加上[]变成[data]就能解决了

很坑爹的是在官方的docs中并没有相关的提示介绍。

 

writer(...)
    csv_writer = csv.writer(fileobj [, dialect='excel']
                                [optional keyword args])
        for row in sequence:
            csv_writer.writerow(row)
     
        [or]
     
        csv_writer = csv.writer(fileobj [, dialect='excel']
                                [optional keyword args])
        csv_writer.writerows(rows)
     
    The "fileobj" argument can be any object that supports the file API.

 

这个教训告诉我,查阅官方docs固然可以帮助了解function的用法。但是很多小窍门还是要多于人交流才能知道,不能闭门造车。

 

2.使用多线程时在运行两次之后出现 RuntimeError: threads can only be started once 报错。当时代码如下:

 

if  __name__ == '__main__':
    runtimes = input('Please Enter runtimes:') #确定运行次数
    cpuget = trg.Thread(target=get_cpuinfo)
    memget = trg.Thread(target=get_meminfo)

    try:
        runtimes = int(runtimes)#检测输入是否为数字
        while runtimes > 0:#运行
            runtimes -= 1
            print('%s times will be running ' % runtimes)
            start_app()
            time.sleep(9)
            move_lafe()
            time.sleep(0.5)
            move_right()
            cpuget.start()
            memget.start()
            memget.join()
            cpuget.join()
            stop_app()
            time.sleep(3)
        print('finish')
    except:
        print('Your enter is Err,pls enter number')

 

解决方法:

把创建线程的对象的两句语句放在while循环里面,让它在每次循环中都创建新的对象。

 

转载于:https://www.cnblogs.com/Thoughts-in-chaos/p/8627639.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值