buildprop.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. # -*- coding:utf-8 -*-
  2. import os
  3. import re # 正则表达式;
  4. import sys
  5. import time
  6. import datetime
  7. import shutil
  8. from ssat_sdk.basessh2 import baseSSH2
  9. cts_ssh2 = baseSSH2()
  10. def Init(host, user, pwd):
  11. cts_ssh2.init_ssh2(user, pwd, host)
  12. def get_props(path, prefix):
  13. 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
  14. bolean, data = cts_ssh2.execute_cmd(cmd)
  15. # 按换行分组;
  16. props = data.split('\n')
  17. # 正则表达式;
  18. p = re.compile(r"(\w*)_(.*)_(\w*)/build.prop:(\d+):(.*)=(.*)", re.DOTALL)
  19. ps = re.compile(r"(\d+):(.*)=(.*)", re.DOTALL) # 短正则;
  20. # list
  21. brand_props = {}
  22. for prop in props:
  23. # 减去多余字符串;
  24. print u"完整属性:",prop
  25. prop = prop.replace(path + prefix, "")
  26. if prop.__len__() == 0:
  27. continue
  28. prop_group = {}
  29. # 版本号_品牌名_日期/build.prop:行号:属性=值
  30. mo = p.search(prop)
  31. # 如果目录下只有一个品牌;
  32. if mo is None:
  33. print u"长正则失败,使用短正则(目录只有一文件夹):", prop
  34. mo = ps.search(prop)
  35. # 统一命名为none
  36. prop_group['brand'] = 'none'
  37. prop_group['version'] = 'none'
  38. prop_group['date'] = 'none'
  39. prop_group['property'] = {'name':mo.group(2), 'value':mo.group(3)}
  40. if prop_group['property']['value'].find("test-keys"):
  41. prop_group['property']['value'] = prop_group['property']['value'].replace("test-keys", "release-keys")
  42. # 字典数组;
  43. if 'none' in brand_props:
  44. brand_props['none']['property'].append(prop_group['property'])
  45. else:
  46. brand_props['none'] = {}
  47. brand_props['none']['property'] = []
  48. brand_props['none']['property'].append(prop_group['property'])
  49. continue
  50. prop_group['brand'] = mo.group(2)
  51. prop_group['version'] = mo.group(1)
  52. prop_group['date'] = mo.group(3)
  53. prop_group['property'] = {'name':mo.group(5), 'value':mo.group(6)}
  54. if prop_group['property']['value'].find("test-keys"):
  55. prop_group['property']['value'] = prop_group['property']['value'].replace("test-keys", "release-keys")
  56. # 字典数组;
  57. if mo.group(2) in brand_props:
  58. brand_props[mo.group(2)]['property'].append(prop_group['property'])
  59. else:
  60. brand_props[mo.group(2)] = {}
  61. brand_props[mo.group(2)]['property'] = []
  62. brand_props[mo.group(2)]['property'].append(prop_group['property'])
  63. # 替换none;
  64. if 'none' in brand_props:
  65. for item in brand_props['none']['property']:
  66. if item['name'] == 'ro.product.brand':
  67. brand_props[item['value']] = brand_props['none']
  68. del brand_props['none']
  69. break
  70. return brand_props
  71. def save_props(brand_props, save_path):
  72. # 如果保存路径不存在,创建;
  73. if not os.path.exists(save_path):
  74. os.makedirs(save_path)
  75. # 遍历字典;
  76. prop_file = save_path
  77. for brand in brand_props:
  78. prop_file = "%s\\%s.prop" % (save_path, brand.lower())
  79. print u"prop文件:",prop_file
  80. with open(prop_file, 'ab+') as f:
  81. for prop in brand_props[brand]['property']:
  82. line = "%s=%s\n" % (prop['name'], prop['value'])
  83. f.write(line)
  84. if __name__ == "__main__":
  85. print u"build-prop"
  86. Init("10.118.1.89", "your name", "your password")
  87. if 1: # 41目录
  88. prefix = "V8-T841T01-LF1V"
  89. save_path = r"F:\Q3-buildprop\41"
  90. if os.path.exists(save_path):
  91. shutil.rmtree(save_path)
  92. brand_props = get_props(r"/home/ftpdata/SoftwareRelease/TEST/RT2841/CTS认证/RT2841P送测资料/SPL20200705/Approved/", prefix)
  93. save_props(brand_props, save_path)
  94. brand_props = get_props(r"/home/ftpdata/SoftwareRelease/TEST/RT2841/CTS认证/RT2841P送测资料/SPL20200705/WITH_HBBTV/Approved/", prefix)
  95. save_props(brand_props, save_path)
  96. if 1: # 51目录
  97. prefix = "V8-T851T01-LF1V"
  98. save_path = r"F:\Q3-buildprop\51"
  99. if os.path.exists(save_path):
  100. shutil.rmtree(save_path)
  101. brand_props = get_props(r"/home/ftpdata/SoftwareRelease/TEST/RT2851/CTS认证/RT2851P送测资料/SPL20200705/Approved/", prefix)
  102. save_props(brand_props, save_path)
  103. brand_props = get_props(r"/home/ftpdata/SoftwareRelease/TEST/RT2851/CTS认证/RT2851P送测资料/SPL20200705/WITH_HBBTV/Approved/", prefix)
  104. save_props(brand_props, save_path)