• 《自拍教程41》Python adb一键清理磁盘


    Android设备,比如车载tbox搭载的Android系统,
    其只有500M的磁盘容量;电视机搭载的Android系统其磁盘容量也非常小,
    一般debug阶段的产品,开启的log比较多,比如有:
    自动后台logcat截取,自动捕捉coredump, tombstone,anr,
    dropbox等crash相关的log,还有比如车载测试,可能产生大量的gps轨迹log,
    语音测试可能产生很多录音文件。及时清理以上log,有很多好处。
    (1). 适时地清理log,可以在导出log的时候,花较少的时间,减少不必要的冗余的log。
    (2). 适时地清理log,可以减少磁盘满爆盘风险,尤其是磁盘容量很小的设备,
    爆盘后你会看到各种App的无法正常运行。
    所以,适时清理log,对于一个合格的测试人员来说,也很重要。


    准备阶段
    1. adb shell rm -rf,可以清除log
    2. 你需要了解具体log尤其是老旧的无用的log的存储位置
    3. 删除log的时候,要注意正在进行写操作的文件,不能删,不然log会丢失。
    4. os.system()可以调用adb命令

    Android系统默认的Log存储路径
    Android Log类型 默认路径
    logcat序列log /data/logs/logcat.txt
    /data/logs/logcat.txt.1

    /data/logs/logcat.txt.20
    dbus序列log /data/logs/dbus.txt
    /data/logs/dbus.txt.1

    /data/logs/dbus.txt.20
    kernel序列log /data/logs/kernel.txt
    /data/logs/kernel.txt.1
    ...
    /data/logs/kernel.txt.20
    tombstone log /data/tombstones/*
    anr卡死log /data/anr/*
    dropbox log /data/system/dropbox/*
    gps log /sdcard/map/gps/*
    高德地图log /sdcard/amapauto8/logs/*


    正在进行写操作的Log不能删除

    其中,自动生成的序列log,比如logcat序列log,
    一般是全部写到logcat.txt,写满5M后,
    将logcat.txt重命名为logcat.txt.1,以此类推。。。
    所以logcat.txt就始终是最新的log,这个文件是不可以删除的,
    因为假如删除了,则文件句柄会出错,无法自动生成序列logcat日志了,
    logcat.txt.1, logcat.txt.2 这些是老的log, 可以删除,
    所以: 只能用adb shell rm -rf /data/logs/logcat.txt.*
    注意这个.*, 代表了.1, .2, .3 ....等等序列log文件

    Python批处理脚本模式
    # coding=utf-8
    import os
    
    print("正在清理旧log...请稍候!")
    os.system("adb shell rm -rf /data/log/logcat.txt.*")
    os.system("adb shell rm -rf /data/log/dbus.txt.*")
    os.system("adb shell rm -rf /data/tombstones/*")
    os.system("adb shell rm -rf /data/anr/*")
    os.system("adb shell rm -rf /data/system/dropbox/*")
    os.system("adb shell rm -rf /sdcard/map/gps/*")
    os.system("adb shell rm -rf /sdcard/amapauto8/logs/*")
    print("旧log清理完毕!")
    os.system("pause")
    

    Python面向过程函数形式

    本次我们区分下清理Log的等级,分2个函数,
    一个是清理大部分log的函数, 一个是清理所有log的函数。

    # coding=utf-8
    import os
    
    def clean_most_logs():
        os.system("adb shell rm -rf /data/logs/logcat.txt.*")
        os.system("adb shell rm -rf /data/logs/dbus.txt.*")
        os.system("adb shell rm -rf /data/tombstones/*")
        os.system("adb shell rm -rf /data/anr/*")
        os.system("adb shell rm -rf /data/system/dropbox/*")
    
    def clean_all_logs():
        clean_most_logs()
        os.system("adb shell rm -rf /sdcard/map/gps/*")
        os.system("adb shell rm -rf /sdcard/amapauto/logs/*")
    
    # print("正在清理大部分的旧log...请稍候!")
    # clean_most_logs()
    # print("大部分旧log清理完毕!")
    
    print("正在所有的旧log...请稍候!")
    clean_all_logs()
    print("所有旧log清理完毕!")
    
    os.system("pause")
    

    以上,实现了函数的嵌套与调用。

    Python面向对象类的形式
    1. 以"万物皆可归类"的思想, 先抽象化出一个类来,
      类名一般建议用"名词", 所以我们命名为"LogCleaner",
      代表Log清理器, 且一般要驼峰式(首字母大写)来规范类的命名.
    2. 养成良好的类的初始化(__init__)的习惯,
      初始化过程中, 可以pass(什么都不做)
    3. 这个LogCleaner 类, 目前需要2个清理log的函数(动作功能),
      一个是清理大部分Log,一个清理所有Log。
    4. 类是一个抽象的事物, 必须实例化成具体的对象后,
      才能进行调用, 所以我们实例化并命名成了l_obj, 表明是一个对象.
    5. 实例化成具体对象后, 对象就可以调用clean_all_logs这个函数了.
    # coding=utf-8
    import os
    
    class LogCleaner():
        def __init__(self):
            pass
    
        def clean_most_logs(self):
            os.system("adb shell rm -rf /data/logs/logcat.txt.*")
            os.system("adb shell rm -rf /data/logs/dbus.txt.*")
            os.system("adb shell rm -rf /data/tombstones/*")
            os.system("adb shell rm -rf /data/anr/*")
            os.system("adb shell rm -rf /data/system/dropbox/*")
    
        def clean_all_logs(self):
            self.clean_most_logs()
            os.system("adb shell rm -rf /sdcard/map/gps/*")
            os.system("adb shell rm -rf /sdcard/amapauto8/logs/*")
    
    l_obj = LogCleaner()
    print("正在所有的旧log...请稍候!")
    l_obj.clean_all_logs()
    print("所有旧log清理完毕!")
    
    os.system("pause")
    
    

    代码运行方式

    确保Android车机设备通过USB线与电脑连接了,adb设备有效连接,
    以上代码的3种实现形式都可以直接运行,比如保存为clear_logs.py并放在桌面,
    每次需要截图的时候,双击运行clear_logs.py,
    你用df查看disk free查看你会发现磁盘空出来了不少的容量。

    更多更好的原创文章,请访问官方网站:www.zipython.com
    自拍教程(自动化测试Python教程,武散人编著)
    原文链接:https://www.zipython.com/#/detail?id=b34f53626b164c18a5580f1731f266b2
    也可关注“武散人”微信订阅号,随时接受文章推送。

  • 相关阅读:
    MyEclipse中选择一行的快捷键
    myeclipse选中一行的内容,快速移动复制到某一行。
    为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
    webpack-dev-server
    webpack-clean-webpack-plugin
    --save-dev和--save的区别
    extract-text-webpack-plugin 的使用及安装
    this 指向详细解析(箭头函数)
    CSS三:CSS的三种引入方式
    Webpack中的css-loader 和style-loader
  • 原文地址:https://www.cnblogs.com/zipython/p/12461789.html
Copyright © 2020-2023  润新知