情景:开发人员在查 bug 时经常需要我们提供手机中的 log
运行后的效果,所有模拟器和测试机按名称分文件夹,点进去可以看到从设备上复制过来的日志文件:

import os

class LogPuller:

    def __init__(self):
        #为了连接mumu模拟器
        try:
            cmd = 'adb connect 127.0.0.1:7555'
            os.system(cmd)
        except:
            print("连接mumu或逍遥有问题")

    #得到设备列表
    def get_device_list(self):
        os.system("adb devices")
        res = os.popen("adb devices").readlines()
        device_list = [sub.split('\t')[0] for sub in res[1:-1]]
        return device_list


    #得到设备的游戏log
    def get_device_log(self,device_list):
        device_path=""
        for device  in device_list :
            print(device)
            if ':' in device:
                device_path = device.replace(':','-')#这里用来处理模拟器多开,冒号不能用在路径名中,所以替换一下
            else:
                device_path = device
            comuter_copy_path = r"E:\\DeviceLog\\"+device_path  #本地的路径,存在指定的文件夹再加上设备名作为区分
            print(comuter_copy_path)
            device_log_path = self.get_device_path(device);
            cmd = 'adb -s {0} pull {1} {2}'.format(device,device_log_path,comuter_copy_path)
            #print(cmd)
            os.system(cmd)

    def get_device_path(self,device):
        path = ""
        #如果是模拟器
        if "emulator" in device:
            path = "/sdcard/Android/data/com.***.***/files/Logs" #自家游戏的包名就不显示了
        #如果是手机
        else:
            path = "/storage/emulated/0/Android/data/com.***.***f/files/Logs"#自家游戏的包名就不显示了
        return path

if __name__=='__main__':
    logPuller = LogPuller()
    device_list = logPuller.get_device_list()
    logPuller.get_device_log(device_list)

我自己电脑上用的是木木模拟器 + 雷电多开 测试机用的是红米和华为,如果是其他模拟器运行有问题可以改改路径再调试调试应该没有太大问题。


↙↙↙阅读原文可查看相关链接,并与作者交流