# -*- coding:utf-8 -*- import os import re # 正则表达式; import sys import time import datetime import shutil from ssat_sdk.basessh2 import baseSSH2 cts_ssh2 = baseSSH2() def Init(host, user, pwd): cts_ssh2.init_ssh2(user, pwd, host) def get_props(path, prefix): cmd = "grep -rn 'ro.product.model\|ro.product.brand\|ro.product.name\|ro.build.flavor\|ro.build.date\|ro.build.fingerprint\|ro.build.date.utc\|ro.build.description\|ro.build.version.incremental' %s*/build.prop" % path bolean, data = cts_ssh2.execute_cmd(cmd) # 按换行分组; props = data.split('\n') # 正则表达式; p = re.compile(r"(\w*)_(.*)_(\w*)/build.prop:(\d+):(.*)=(.*)", re.DOTALL) ps = re.compile(r"(\d+):(.*)=(.*)", re.DOTALL) # 短正则; # list brand_props = {} for prop in props: # 减去多余字符串; print u"完整属性:",prop prop = prop.replace(path + prefix, "") if prop.__len__() == 0: continue prop_group = {} # 版本号_品牌名_日期/build.prop:行号:属性=值 mo = p.search(prop) # 如果目录下只有一个品牌; if mo is None: print u"长正则失败,使用短正则(目录只有一文件夹):", prop mo = ps.search(prop) # 统一命名为none prop_group['brand'] = 'none' prop_group['version'] = 'none' prop_group['date'] = 'none' prop_group['property'] = {'name':mo.group(2), 'value':mo.group(3)} if prop_group['property']['value'].find("test-keys"): prop_group['property']['value'] = prop_group['property']['value'].replace("test-keys", "release-keys") # 字典数组; if 'none' in brand_props: brand_props['none']['property'].append(prop_group['property']) else: brand_props['none'] = {} brand_props['none']['property'] = [] brand_props['none']['property'].append(prop_group['property']) continue prop_group['brand'] = mo.group(2) prop_group['version'] = mo.group(1) prop_group['date'] = mo.group(3) prop_group['property'] = {'name':mo.group(5), 'value':mo.group(6)} if prop_group['property']['value'].find("test-keys"): prop_group['property']['value'] = prop_group['property']['value'].replace("test-keys", "release-keys") # 字典数组; if mo.group(2) in brand_props: brand_props[mo.group(2)]['property'].append(prop_group['property']) else: brand_props[mo.group(2)] = {} brand_props[mo.group(2)]['property'] = [] brand_props[mo.group(2)]['property'].append(prop_group['property']) # 替换none; if 'none' in brand_props: for item in brand_props['none']['property']: if item['name'] == 'ro.product.brand': brand_props[item['value']] = brand_props['none'] del brand_props['none'] break return brand_props def save_props(brand_props, save_path): # 如果保存路径不存在,创建; if not os.path.exists(save_path): os.makedirs(save_path) # 遍历字典; prop_file = save_path for brand in brand_props: prop_file = "%s\\%s.prop" % (save_path, brand.lower()) print u"prop文件:",prop_file with open(prop_file, 'ab+') as f: for prop in brand_props[brand]['property']: line = "%s=%s\n" % (prop['name'], prop['value']) f.write(line) if __name__ == "__main__": print u"build-prop" Init("10.118.1.89", "your name", "your password") if 1: # 41目录 prefix = "V8-T841T01-LF1V" save_path = r"F:\Q3-buildprop\41" if os.path.exists(save_path): shutil.rmtree(save_path) brand_props = get_props(r"/home/ftpdata/SoftwareRelease/TEST/RT2841/CTS认证/RT2841P送测资料/SPL20200705/Approved/", prefix) save_props(brand_props, save_path) brand_props = get_props(r"/home/ftpdata/SoftwareRelease/TEST/RT2841/CTS认证/RT2841P送测资料/SPL20200705/WITH_HBBTV/Approved/", prefix) save_props(brand_props, save_path) if 1: # 51目录 prefix = "V8-T851T01-LF1V" save_path = r"F:\Q3-buildprop\51" if os.path.exists(save_path): shutil.rmtree(save_path) brand_props = get_props(r"/home/ftpdata/SoftwareRelease/TEST/RT2851/CTS认证/RT2851P送测资料/SPL20200705/Approved/", prefix) save_props(brand_props, save_path) brand_props = get_props(r"/home/ftpdata/SoftwareRelease/TEST/RT2851/CTS认证/RT2851P送测资料/SPL20200705/WITH_HBBTV/Approved/", prefix) save_props(brand_props, save_path)