第22篇上在写这个小工具时还没有学会openpyxl的用法,关于最终写到excel里的部分是直接使用了同事的封装方法,后面发现用openpyxl简直太简单了,openpyxl模块功能强大,在此推荐一篇博客,个人认为这篇博客已经写得内容很详尽,奉上连接:https://www.cnblogs.com/pinpin/p/10471732.html
以下为优化后的代码:
import os
import time
import re
from openpyxl import Workbook
class MyError(Exception): #自定义异常
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
class Get_Version():
def __init__(self,ip): #连接adb
os.popen('adb disconnect') #断开跟其他设备的连接
os.popen('adb kill-server') #关闭adb服务
if re.match(r'((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))',ip).group()==ip:
return_value=os.popen('adb connect %s'%ip).read()
print(return_value)
if ('connected to %s'%ip) in return_value:
print('adb connected successfully!,you can continue!') #如果adb连接失败,抛出异常
else:
raise MyError('请检查输入的ip地址是否和本电脑在同一网段,或者需要启动调试设备的adb') #如果adb连接失败,抛出异常
else:
raise MyError('ip输入错误,请检查')
def get_path(self): #作为excel保存的路径
self.path=os.getcwd()+r'\APP_VERSION'
if not os.path.isdir(self.path):
os.makedirs(self.path)
return self.path
def get_sheet_name(self):
self.rel=os.popen('adb shell getprop |findstr rel')
self.rel=self.rel.read()
self.rel=re.search(r'\[ro\.build\.version\.release\]\:\s\[(.*)\]',self.rel).group(1) #用固件版本号作为sheet页名称
return self.rel
def app_list_version(self): #获取应用版本号列表
data=os.popen('adb shell pm list package')
data=data.read()
app_list=data.split('\n')
self.result=[['包名','Version','VersionCode']]
for i in app_list:
if i[:8]=='package:':
temp=[]
version=os.popen('adb shell dumpsys package %s|findstr version '%i[8:])
version=version.read()
version=version.split()
for j in range(len(version)):
if len(temp) <2 and bool(re.match(r'version',version[j])) is True: #只获取最新的应用版本号,限制len(mid)最长为2
temp.append(version[j].split('=')[1])
temp.append(i[8:])
temp.reverse()
self.result.append(temp)
return self.result
def creat_excel_by_openpyxl(self):
wb=Workbook() #生成一个excel
ws=wb.active #操作当前sheet页
ws.title=self.rel
# 调整列宽
ws.column_dimensions['A'].width = 40
ws.column_dimensions['B'].width = 40
ws.column_dimensions['C'].width = 40
for i in self.result:
ws.append(i)
excel_name = '%s\\%s.xlsx' % (self.path,time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())))
wb.save(excel_name)
print('excel create successully')
return None
if __name__=='__main__':
a=Get_Version('192.168.1.152') #将自己要连接的ip写入
a.get_path()
a.get_sheet_name()
a.app_list_version()
a.creat_excel_by_openpyxl()