这是一个更新版本服务代码python

叁歲伎倆 2024-04-19 15:42 120阅读 0赞
  1. import win32serviceutil
  2. import win32service
  3. import win32event
  4. import os
  5. import logging
  6. import inspect
  7. import time
  8. from update_client import *
  9. import socket
  10. import json
  11. import websocket
  12. import requests
  13. import traceback
  14. import threading
  15. import configparser
  16. #AzUpdateService.py
  17. class UpdateService(win32serviceutil.ServiceFramework):
  18. _svc_name_ = "AzUpdateService"
  19. _svc_display_name_ = "Anzer Update Service"
  20. _svc_description_ = "This is a python service code "
  21. def __init__(self, args):
  22. win32serviceutil.ServiceFramework.__init__(self, args)
  23. self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
  24. self.logger = self._getLogger()
  25. self.run = True
  26. self.recv_port = 5650
  27. self.send_port = 5651
  28. # self.target_ip = '127.0.0.1' # 机器人ip
  29. # self.local_ip = '127.0.0.1' # 本机ip
  30. # self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  31. # self.s.bind((self.local_ip, self.recv_port))
  32. self.count = 0
  33. self.time_running = True
  34. self.cf = configparser.ConfigParser()
  35. cnf = os.path.join(os.path.dirname(__file__), 'company.ini')
  36. self.cf.read(cnf)
  37. """
  38. [company]
  39. id=1
  40. server_ip=116.6.229.133
  41. server_port=8866
  42. """
  43. def _getLogger(self):
  44. # logger = logging.getLogger('[UpdateService]')
  45. # this_file = inspect.getfile(inspect.currentframe())
  46. # dirpath = os.path.abspath(os.path.dirname(this_file))
  47. # handler = logging.FileHandler(os.path.join(dirpath, "update_service.log"))
  48. # formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
  49. # handler.setFormatter(formatter)
  50. # logger.addHandler(handler)
  51. # logger.setLevel(logging.INFO)
  52. this_file = inspect.getfile(inspect.currentframe())
  53. dirpath = os.path.abspath(os.path.dirname(this_file))
  54. log_dir = os.path.join(dirpath, 'log')
  55. if not os.path.exists(log_dir):
  56. os.mkdir(log_dir)
  57. name = os.path.join(dirpath, log_dir, "update")
  58. import logging
  59. import logging.handlers
  60. # logging初始化工作
  61. logging.basicConfig()
  62. # myapp的初始化工作
  63. logger = logging.getLogger('[UpdateService]')
  64. logger.setLevel(logging.INFO)
  65. # 添加TimedRotatingFileHandler
  66. # 定义一个1秒换一次log文件的handler
  67. # 保留3个旧log文件
  68. filehandler = logging.handlers.TimedRotatingFileHandler(
  69. name, when='H', interval=6, backupCount=10)
  70. # 设置后缀名称,跟strftime的格式一样
  71. filehandler.suffix = "%Y-%m-%d_%H-%M-%S.log"
  72. formatter = logging.Formatter(
  73. '%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
  74. filehandler.setFormatter(formatter)
  75. logger.addHandler(filehandler)
  76. return logger
  77. def SvcDoRun1(self):
  78. self.logger.info("service is run....")
  79. addr = (self.target_ip, self.send_port)
  80. # main_run(self.logger)
  81. while self.run:
  82. try:
  83. if self.s != None:
  84. self.logger.info("listening....")
  85. data = self.s.recv(1024).decode('utf-8')
  86. self.logger.info(data)
  87. if len(data) > 10:
  88. uuid = run_main(data, self.logger,
  89. client=self.s, addr=addr)
  90. self.logger.info('uuid: '+uuid)
  91. if len(uuid) > 0:
  92. time.sleep(3)
  93. self.s = socket.socket(
  94. socket.AF_INET, socket.SOCK_DGRAM)
  95. self.s.bind((self.local_ip, self.recv_port))
  96. self.logger.info('try reconnect and send')
  97. js = json.dumps({"cmd": 642, "sn": 3, "uuid": uuid, "body": {
  98. 'error': 0, 'result': 1, 'msg': '{} Update Finish, Superdog is running'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))}})
  99. jsbs = bytes(js, encoding='utf-8')
  100. self.s.sendto(jsbs, addr)
  101. else:
  102. time.sleep(3)
  103. self.s = socket.socket(
  104. socket.AF_INET, socket.SOCK_DGRAM)
  105. self.s.bind((self.local_ip, self.recv_port))
  106. self.logger.info('try reconnect')
  107. except Exception as e:
  108. self.logger.error('error '+e)
  109. if len(e.args) > 0 and str(e.args[1]).startswith('远程主机强迫关闭了一个现有的连接'):
  110. try:
  111. # self.run=0
  112. # os._exit(0)
  113. time.sleep(5)
  114. self.s = socket.socket(
  115. socket.AF_INET, socket.SOCK_DGRAM)
  116. self.s.bind((self.local_ip, self.recv_port))
  117. # print('reconnect')
  118. self.logger.info('reconnect')
  119. except Exception as e:
  120. self.logger.error(e)
  121. elif len(e.args) > 0 and str(e.args[1]).startswith('你的主机中的软件中止了一个已建立的连接'):
  122. try:
  123. # self.run=0
  124. # os._exit(0)
  125. time.sleep(5)
  126. self.s = socket.socket(
  127. socket.AF_INET, socket.SOCK_DGRAM)
  128. self.s.bind((self.local_ip, self.recv_port))
  129. self.logger.info('reconnect')
  130. except Exception as e:
  131. self.logger.error(e)
  132. self.logger.info('SvcDoRun stop service')
  133. self.s.close()
  134. def SvcDoRun(self):
  135. logger = self.logger
  136. logger.info('start')
  137. old_company = self.cf.get('company', 'id')
  138. server_ip = self.cf.get('company', 'server_ip')
  139. server_port = self.cf.getint('company', 'server_port')
  140. def compare_ver(old_ver, ver):
  141. old_1, old_2, old_3 = old_ver.split('.') # 0.0.2
  142. v1, v2, v3 = ver.split('.') # 0.0.0
  143. if (int(v1) > int(old_1)) or (int(v1) == int(old_1) and int(v2) > int(old_2)) or (int(v1) == int(old_1) and int(v2) == int(old_2) and int(v3) > int(old_3)):
  144. return 1
  145. else:
  146. return 0
  147. def compare_md5(omd5, md5):
  148. if omd5 != md5 and len(md5) > 0 and len(omd5) > 0:
  149. return 1
  150. else:
  151. return 0
  152. def on_message(ws, message):
  153. print(message)
  154. def on_error(ws, error):
  155. print(error)
  156. def on_close(ws):
  157. print("### closed ###")
  158. def on_open(ws):
  159. pass
  160. def run_bat(bat_file,logger):
  161. def run():
  162. try:
  163. logger.info('start run bat')
  164. ret = os.system(bat_file)
  165. logger.info('run bat result :{}'.format(ret))
  166. except:
  167. logger.error(traceback.format_exc())
  168. run()
  169. # t = threading.Thread(target = run)
  170. # t.start()
  171. def init():
  172. plat_bat=''
  173. server_bat=''
  174. try:
  175. ver_file = os.path.join(os.path.dirname(__file__), 'ver.ini')
  176. old_ver = '0.0.0'
  177. old_md5 = ''
  178. if os.path.exists(ver_file):
  179. with open(ver_file, 'r') as f:
  180. txt = f.readline()
  181. data = txt.split('|')
  182. old_plat_ver, old_plat_md5 = data[0].split(':')
  183. old_server_ver, old_server_md5 = data[1].split(':')
  184. url = 'http://{}:{}/read_ver'.format(server_ip, server_port)
  185. resp = requests.get(url)
  186. logger.info('read_ver result :'+resp.text)
  187. js = json.loads(resp.text)
  188. ver = js['plat_ver']['ver']
  189. md5 = js['plat_ver']['md5']
  190. company = js['plat_ver']['company']
  191. # update_type = js['plat_ver']['update_type']
  192. if old_company == company:
  193. md5 = md5.lower()
  194. logger.info('plat info compare , {}=={},{}=={}'.format(
  195. old_plat_md5, md5, old_plat_ver, ver))
  196. cm = compare_md5(old_plat_md5, md5)
  197. cv = compare_ver(old_plat_ver, ver)
  198. logger.info('{},{}'.format(cm, cv))
  199. if cv and cm:
  200. d_url = 'http://{}:{}/download?filename=update.zip'.format(
  201. server_ip, server_port)
  202. logger.info('start run main')
  203. ret,plat_bat = run_main(
  204. d_url, md5, logger=logger, update_type=1)
  205. logger.info('run main resutl {}'.format(ret))
  206. if ret:
  207. content = ''
  208. with open(ver_file, 'r') as f:
  209. txt = f.read()
  210. content = txt.split('|')
  211. with open(ver_file, 'w') as f:
  212. v = '{}:{}'.format(ver, md5)
  213. f.write('{}|{}'.format(v, content[1]))
  214. logger.info('update plat success')
  215. else:
  216. logger.info('update plat failed')
  217. ver = js['server_ver']['ver']
  218. md5 = js['server_ver']['md5']
  219. company = js['server_ver']['company']
  220. # update_type = js['server_ver']['update_type']
  221. if old_company == company:
  222. md5 = md5.lower()
  223. logger.info('{}=={},{}=={}'.format(
  224. old_server_md5, md5, old_server_ver, ver))
  225. cm = compare_md5(old_server_md5, md5)
  226. cv = compare_ver(old_server_ver, ver)
  227. logger.info('server info compare , {},{}'.format(cm, cv))
  228. if cv and cm:
  229. d_url = 'http://{}:{}/download?filename=server_update.zip'.format(
  230. server_ip, server_port)
  231. logger.info('start run main')
  232. ret,server_bat = run_main(
  233. d_url, md5, logger=logger, update_type=2)
  234. logger.info('run main result {}'.format(ret))
  235. if ret:
  236. content = ''
  237. with open(ver_file, 'r') as f:
  238. txt = f.read()
  239. content = txt.split('|')
  240. with open(ver_file, 'w') as f:
  241. v = '{}:{}'.format(ver, md5)
  242. f.write('{}|{}'.format(content[0], v))
  243. logger.info('update server success')
  244. else:
  245. logger.info('update server failed')
  246. except:
  247. logger.info(traceback.format_exc())
  248. self.count = 0
  249. finally:
  250. if len(plat_bat) > 0:
  251. run_bat(plat_bat,logger)
  252. if len(server_bat) > 0:
  253. run_bat(server_bat,logger)
  254. def time_count():
  255. while self.time_running:
  256. self.count = self.count + 1
  257. time.sleep(1)
  258. # websocket.enableTrace(True)
  259. # ws = websocket.WebSocketApp("ws://192.168.18.174:8866",
  260. # on_message=on_message,
  261. # on_error=on_error,
  262. # on_close=on_close,
  263. # on_open=on_open)
  264. # ws.on_open = on_open
  265. # ws.run_forever()
  266. t = threading.Thread(target=time_count)
  267. t.start()
  268. self.logger.info('start ping')
  269. backinfo = os.system('ping {}'.format(server_ip))
  270. times = 0
  271. if backinfo:
  272. self.count = 0
  273. while self.run:
  274. if self.count >= 60 * 1:
  275. self.logger.info('try to update {}'.format(times))
  276. init()
  277. times = times + 1
  278. self.count = 0
  279. if times >= 5:
  280. times = 0
  281. self.time_running = False
  282. self.run = False
  283. break
  284. else:
  285. init()
  286. def SvcStop(self):
  287. self.time_running = False
  288. self.run = False
  289. self.logger.info('SvcStop stop service')
  290. # # stop_run(self.logger)
  291. # try:
  292. # self.s.close()
  293. # except Exception as e:
  294. # pass
  295. # self.logger.info("service is stop....")
  296. self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
  297. win32event.SetEvent(self.hWaitStop)
  298. # self.run = False
  299. if __name__ == '__main__':
  300. win32serviceutil.HandleCommandLine(UpdateService)```

import requests
import os
import zipfile
import json
import shutil
import time
import socket
import hashlib
import traceback
import threading

#update_client.py

exelist = [‘AZavstream’, ‘AZfdr’, ‘AZheadface’,

‘AZnav’, ‘AZnet’, ‘AZplatsdk’, ‘AZserial’, ‘AZupdate’]

exelist = []
dog = ‘AzSuperDog’
conf_path = r’C:\AZplat\azconfig\AZsuperdog_config.ini’
bat_file = ‘update.bat’

logger = get_logger(‘az_update_service’,’[UpdateService]’)

def stop_exe(exe):
cmd = r’taskkill /F /IM {}’.format(exe)
os.system(cmd)
print(‘stop {}’.format(exe))

def start_exe(exe):
cmd = r’start {}’.format(exe)
os.system(cmd)
print(‘start {}’.format(exe))

def start_server(name):
cmd = r’net start {}’.format(name)
os.system(cmd)
print(‘start server {}’.format(name))

def stop_server(name):
cmd = r’net stop {}’.format(name)
os.system(cmd)

def unzip_file(zfile_path, unzip_dir, logger=None):
‘’’
function:解压
params:
zfile_path:压缩文件路径
unzip_dir:解压缩路径
description:
‘’’
try:
logger.info(‘zipfile :’+zfile_path)
# name = os.path.split(zfile_path)[1]
# unzip_dir = os.path.join(unzip_dir, name.replace(’.zip’, ‘’))
logger.info(‘unzip_dir :’+unzip_dir)
if not os.path.exists(unzip_dir):
os.mkdir(unzip_dir)

  1. with zipfile.ZipFile(zfile_path) as zfile:
  2. zfile.extractall(path=unzip_dir)
  3. return True
  4. except zipfile.BadZipFile as e:
  5. print(zfile_path + " is a bad zip file ,please check!")
  6. return False

def load_json_file(file):
with open(file, ‘r’) as f:
ret = json.load(f)
return ret

def update_files(js):
try:
for floder in js:
if floder == ‘’:
continue
oprts = js[’{}’.format(floder)]
for oprt in oprts:
if oprt == ‘’:
continue
files = oprts[’{}’.format(oprt)]
for fd in files:
if fd == ‘’:
continue
f = files[’{}’.format(fd)]
# 目标路径
file_path = os.path.join(base_path, floder, f)
# 源路径
src = os.path.join(test_path, f)
if oprt == ‘update’:
shutil.copy(src, file_path)
elif oprt == ‘add’:
shutil.move(src, file_path)
elif oprt == ‘del’:
del_file(file_path)
except Exception as e:
print(e)
return False
# print(floder + ’ ‘+ oprt + ’ ’ + str(files))
return True

def update_file(folder=’’, client=None, addr=None, uuid=None, logger=None):
try:
global exelist
print(folder)
fds = os.listdir(folder)
for d in fds:
name = os.path.join(folder, d)
if os.path.isdir(name):
if d in exelist:
# print(d)
allfile = os.walk(name)

  1. for root, dirs, files in allfile:
  2. for f in files:
  3. try:
  4. fpath = os.path.join(base_path, d, f)
  5. src = os.path.join(name, f)
  6. # print(d + ' ' + src)
  7. # print(fpath)
  8. js = '{} updating {}--{}'.format(time.strftime(
  9. "%Y-%m-%d %H:%M:%S", time.localtime()), d, f)
  10. # logger.info(js)
  11. # data = json.dumps({"cmd": 642, "sn": 3, "uuid": uuid, "body": {
  12. # 'error': 0, 'result': 1, 'msg': js}})
  13. # send(client, data, addr)
  14. # shutil.copy(src, fpath)
  15. print(js)
  16. except Exception as e:
  17. # logger.info(e)
  18. # data = json.dumps({"cmd": 642, "sn": 3, "uuid": uuid, "body": {
  19. # 'error': 1, 'result': 0, 'msg': 'Update {} Error {}'.format(js,e)}})
  20. # send(client, data, addr)
  21. continue
  22. except Exception as e:
  23. logger.info(e)
  24. data = json.dumps({"cmd": 642, "sn": 3, "uuid": uuid, "body": {
  25. 'error': 1, 'result': 0, 'msg': '{} Error {}'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), e)}})
  26. send(client, data, addr)
  27. return True

def del_file(file):
if os.path.exists(file):
os.remove(file)

def fileMD5(filename):
m = hashlib.md5() # md5计算
with open(filename, ‘rb’) as f:
while True:
data = f.read(4096)
if len(data) == 0:
break
m.update(data)
return m.hexdigest()

def download(url, md5, client=None, addr=None, uuid=None, logger=None):
# txt = json.loads(js)
# url = txt[‘body’][‘address’]
# md5 = txt[‘body’][‘md5’]
# ‘http://116.6.229.133:8866/download?filename=update.zip’
r = requests.get(url, stream=True)
r.raise_for_status()
path = test_path
if not os.path.exists(path):
os.mkdir(path)
strs = url.split(’=’)
file = os.path.join(path, strs[-1])
all_size = int(r.headers[‘content-length’])
print(all_size)
all_chunk = 0
last_per = 0
with open(file, ‘wb’) as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
f.flush()
all_chunk += len(chunk)
rate = float(all_chunk) / float(all_size)
per = format(rate, “.2f”)
if all_chunk <= all_size and per != 0 and last_per != per:
last_per = per
show_per = ‘%.0f%%’ % (rate * 100)
if show_per == ‘0%’:
continue
# data = json.dumps({“cmd”: 642, “sn”: 3, “uuid”: uuid, “body”: {‘error’: 0, ‘result’: 1, ‘msg’: ‘{} Download Completed {}’.format(
# time.strftime(“%Y-%m-%d %H:%M:%S”, time.localtime()), show_per)}})
# send(client, data, addr,logger)
# logger.info(data)

  1. return file

弃用

def download_file(js=’’):
# js = r’{“cmd”: 555, “sn”: 2, “uuid”: “040082d087c335e3bd2b”, “body”: {“address”: “http://192.168.18.174:51200/1.1/4p\_pickle.zip”, “md5”: “1cd227aa39580a1bb542f1a6fd5bd7ca”}}’
txt = json.loads(js)
url = txt[‘body’][‘address’]
md5 = txt[‘body’][‘md5’]
resp = requests.get(url)

  1. path = test_path
  2. if not os.path.exists(path):
  3. os.mkdir(path)
  4. strs = os.path.split(url)
  5. file = os.path.join(path, strs[1])
  6. with open(file, 'wb') as f:
  7. f.write(resp.content)
  8. return file

def load_config():
apps = []
try:
with open(conf_path, ‘r’) as f:
txts = f.readlines()
for txt in txts:
tmp = txt.split(’=’)
if len(tmp) > 1:
dname = tmp[0]
data = tmp[1].replace(’\n’, ‘’).replace(’\r’, ‘’)
apps.append(data)
except Exception as e:
print(e)
return apps

server_path = ‘C:\’
base_path = ‘C:\AZplat’
test_path = os.path.join(base_path, ‘test’)

def send(client, data, addr, logger=None):
jsbs = bytes(data, encoding=‘utf-8’)
client.sendto(jsbs, addr)
logger.info(data)

def stop_server_exe():
stop_exe(‘azs_tm.exe’)
stop_exe(‘azs_audio.exe’)
stop_exe(‘azs_mobile.exe’)
stop_exe(‘azs_pc.exe’)
stop_exe(‘azs_record.exe’)
stop_exe(‘azs_rob.exe’)
stop_exe(‘azs_client.exe’)
stop_exe(‘CenterManger.exe’)

def start_server_exe():
start_server(‘azs_tm’)
#start_server(‘azs_audio’)
#start_server(‘azs_mobile’)
#start_server(‘azs_pc’)
#start_server(‘azs_record’)
#start_server(‘azs_rob’)
#start_server(‘azs_client’)

def run_main0(js, logger=None, client=None, addr=None):
try:
# for exe in exelist:
# stop_exe(exe+’.exe’)
# print(‘stop all’)
txt = json.loads(js)
uuid = txt[‘uuid’]
stop_dog = txt[‘body’][‘stopdog’]
if uuid == “”:
return uuid

  1. global exelist
  2. exelist = load_config()
  3. if stop_dog == '0':
  4. global test_path
  5. if not os.path.exists(test_path):
  6. os.mkdir(test_path)
  7. data = json.dumps({"cmd": 642, "sn": 3, "uuid": uuid, "body": {
  8. 'error': 0, 'result': 1, 'msg': '{} Start Download, Please Wait ......'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))}})
  9. send(client, data, addr, logger)
  10. zipfile = download(js, client=client, addr=addr,
  11. uuid=uuid, logger=logger)
  12. data = json.dumps({"cmd": 642, "sn": 3, "uuid": uuid, "body": {
  13. 'error': 0, 'result': 1, 'msg': '{} Download Files Finish'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))}})
  14. send(client, data, addr, logger)
  15. data = json.dumps({"cmd": 642, "sn": 3, "uuid": uuid, "body": {
  16. 'error': 0, 'result': 1, 'msg': '{} Superdog Service Stop, Start Update ......'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))}})
  17. send(client, data, addr, logger)
  18. time.sleep(3)
  19. # logger.info('stop Superdog Service')
  20. stop_server(dog)
  21. ret = unzip_file(zipfile, base_path, logger=logger)
  22. if ret == True:
  23. # logger.info('unzip done')
  24. data = json.dumps({"cmd": 642, "sn": 3, "uuid": uuid, "body": {
  25. 'error': 0, 'result': 1, 'msg': '{} Unzip Files Finish'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))}})
  26. send(client, data, addr, logger)
  27. else:
  28. # logger.info('unzip done')
  29. data = json.dumps({"cmd": 642, "sn": 3, "uuid": uuid, "body": {
  30. 'error': 1, 'result': 0, 'msg': '{} Unzip Files Error'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))}})
  31. send(client, data, addr, logger)
  32. return uuid
  33. time.sleep(2)
  34. # client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  35. # client.bind(('127.0.0.1', 5651))
  36. shutil.rmtree(test_path)
  37. test_path = os.path.join(base_path, 'test')
  38. logger.info('update done')
  39. data = json.dumps({"cmd": 642, "sn": 3, "uuid": uuid, "body": {
  40. 'error': 0, 'result': 1, 'msg': '{} Update Files Finish'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))}})
  41. send(client, data, addr, logger)
  42. start_server(dog)
  43. # logger.info('start dog done')
  44. os.remove(zipfile)
  45. # elif stop_dog == '1':
  46. # # logger.info('stop Superdog Service')
  47. # stop_server(dog)
  48. # data = json.dumps({"cmd": 642, "sn": 3, "uuid": uuid, "body": {
  49. # 'error': 0, 'result': 1, 'msg': '{} Superdog Service Stop, Start Update ......'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))}})
  50. # send(client, data, addr,logger)
  51. # return uuid
  52. # elif stop_dog == '2':
  53. # start_server(dog)
  54. # # logger.info('start dog done')
  55. # data = json.dumps({"cmd": 642, "sn": 3, "uuid": uuid, "body": {
  56. # 'error': 0, 'result': 1, 'msg': '{} Update Finish, Superdog Service Is Running'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))}})
  57. # send(client, data, addr,logger)
  58. # return uuid
  59. return uuid
  60. except:
  61. logger.error(traceback.format_exc())
  62. data = json.dumps({"cmd": 642, "sn": 3, "uuid": uuid, "body": {
  63. 'error': 1, 'result': 0, 'msg': '{} Error {}'.format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), e)}})
  64. send(client, data, addr, logger)
  65. return uuid

def run_main(url, md5, logger=None, client=None, addr=None, update_type=None):
try:
global exelist
exelist = load_config()

  1. global test_path
  2. if not os.path.exists(test_path):
  3. os.mkdir(test_path)
  4. bat_path = ''
  5. zipfile = download(url, md5)
  6. calc_md5 = fileMD5(zipfile)
  7. logger.info("update file: {},calc md5: {},server md5: {}".format(zipfile, calc_md5, md5))
  8. if calc_md5 != md5:
  9. logger.info('md5 calc error')
  10. return False,bat_path
  11. if update_type == 1:
  12. stop_server(dog)
  13. ret = unzip_file(zipfile, base_path, logger=logger)
  14. bat_path = os.path.join(base_path,bat_file)
  15. logger.info('bat file :'+bat_path)
  16. time.sleep(2)
  17. shutil.rmtree(test_path)
  18. test_path = os.path.join(base_path, 'test')
  19. start_server(dog)
  20. elif update_type == 2:
  21. stop_server_exe()
  22. ret = unzip_file(zipfile, server_path, logger=logger)
  23. bat_path = os.path.join(server_path,bat_file)
  24. logger.info('bat file :'+bat_path)
  25. time.sleep(2)
  26. shutil.rmtree(test_path)
  27. test_path = os.path.join(base_path, 'test')
  28. start_server_exe()
  29. else:
  30. logger.info('update type error')
  31. return False,bat_path
  32. logger.info('successful')
  33. return True,bat_path
  34. except:
  35. logger.error(traceback.format_exc())
  36. return False,bat_path

if name == “main”:
# import socket
# import time

  1. # s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  2. # s.bind(('192.168.15.39', 5650))
  3. # while True:
  4. # data = s.recv(1024).decode('utf-8')
  5. # print(data)
  6. # if len(data) > 10:
  7. # run_main(data)
  8. # s.close()
  9. # # print(test_path)
  10. # exelist = load_config()
  11. # update_file(test_path)
  12. # # js=json.dumps({"cmd": 642, "sn": 3, "uuid": "040082d087c335e3bd2b", "body": {'error':0,'result':1,'msg':''}})
  13. # js = r'{"cmd": 555, "sn": 2, "uuid": "040082d087c335e3bd2b", "body": {"address": "http://192.168.18.174:51200/3.0/AZplat3.0.zip", "md5": "1cd227aa39580a1bb542f1a6fd5bd7ca"}}'
  14. # download(js)
  15. # show_per = '%.0f%%' % (0.1002 * 100)
  16. # print(show_per)
  17. m = fileMD5(r'C:\test\server_update.zip')
  18. print(m)```

install_run.bat

  1. @echo on
  2. set path=%Path%;C:\AZplat\py_update_service\py36-azupdate
  3. start wmic ENVIRONMENT where "name='Path' and username='<system>'" set VariableValue="%Path%;C:\AZplat\py_update_service\py36-azupdate"
  4. start python C:\AZplat\py_update_service\AzService.py --startup auto install
  5. ping -n 3 127.0.0.1>nul
  6. start python C:\AZplat\py_update_service\AzUpdateService.py --startup auto install
  7. python C:\AZplat\py_update_service\AzService.py start
  8. python C:\AZplat\py_update_service\AzUpdateService.py start

company.ini
[company]
id=1
server_ip=116.6.229.133
server_port=8866

  1. stop_remove.bat
  2. @echo off
  3. set path=%Path%;C:\AZplat\py_update_service\py36-azupdate
  4. start C:\AZplat\py_update_service\py36-azupdate\python.exe C:\AZplat\py_update_service\AzUpdateService.py stop
  5. ping -n 3 127.0.0.1>nul
  6. start C:\AZplat\py_update_service\py36-azupdate\python.exe C:\AZplat\py_update_service\AzUpdateService.py remove
  7. start C:\AZplat\py_update_service\py36-azupdate\python.exe C:\AZplat\py_update_service\AzService.py stop
  8. ping -n 3 127.0.0.1>nul
  9. start C:\AZplat\py_update_service\py36-azupdate\python.exe C:\AZplat\py_update_service\AzService.py remove

ver.ini
0.0.0:d60bd00ce991aa8097ca4b59561edd|0.0.0:e48ab1742e2c7885a1b8d69684da16

发表评论

表情:
评论列表 (有 0 条评论,120人围观)

还没有评论,来说两句吧...

相关阅读

    相关 一个自述

    想在掘金写故事 我一直认为写博客就是一种享受的过程,写自己想说的东西,做自己想做的简简单单,明明白白。 之前写博客一直乱乱的,自己在git上面也搭建了个博客平台,