资源简介
用Python实现一个软件自动升级系统。设计思路很简单:当有新版本需要发布时,将文件放在服务端,生成一个记录每个文件变化的配置文件。客户端本地也有一个记录文件信息的配置文件,客户端检查更新时,将服务端的配置文件下载下来,与本地配置文件进行比较,然后下载有变化的文件,覆盖本地文件(如果文件正在使用中,可能无法覆盖,这时候更新前应该先关闭正在运行的客户端),中间有Tkinter做的界面提示更新进度。更新结束后根据策略决定是否重启客户端。

代码片段和文件信息
# -*- coding: utf-8 -*-
# @Time : 2019/4/25 20:16
# @Author : g05325
# @File : AutoUpdate.py
# @Software: PyCharm
# @Function: 实现客户端自动更新(客户端)
import os
import sys
import time
import getopt
import requests
import shutil
import zipfile
import tkinter
from tkinter import messagebox ttk
from contextlib import closing
import xml.etree.ElementTree as ET
import xml.dom.minidom as minidom
# 处理xml的类
class VersionInfoxml:
def __init__(self xml_path server_info=None module_list=None):
self.xml_path = xml_path
if server_info is not None:
if module_list is None:
module_list = [“ClientVersion“]
self.create_new_xml(server_info module_list)
self.tree = ET.parse(self.xml_path)
self.root = self.tree.getroot()
def create_new_xml(self server_info module_info):
root = ET.Element(“versionInfo“)
ServerInfo = ET.SubElement(root “ServerInfo“)
ET.SubElement(ServerInfo “ServerIp“).text = server_info[0]
ET.SubElement(ServerInfo “ServerPort“).text = server_info[1]
ET.SubElement(ServerInfo “xmlLocalPath“).text = server_info[2]
for each_module in module_info:
ET.SubElement(root each_module).set(“Version“ “0“)
self.save_change(root)
print(“I created a new temp xml!“)
def save_change(self root=None):
if root is None:
root = self.root
rough_bytes = ET.tostring(root “utf-8“)
rough_string = str(rough_bytes encoding=“utf-8“).replace(“\n“ ““).replace(“\t“ ““).replace(“ “ ““)
content = minidom.parseString(rough_string)
with open(self.xml_path ‘w+‘) as fs:
content.writexml(fs indent=““ addindent=“\t“ newl=“\n“ encoding=“utf-8“)
return True
def changeServerInfo(self name value):
if type(value) is int:
value = str(value)
Xpath = “ServerInfo/%s“ % name
element = self.root.find(Xpath)
if element is not None:
element.text = value
# self.save_change()
else:
print(“I can‘t find \“ServerInfo/%s\“ in xml!“ % name)
def addobject(self module_name file_path file_size last_update_time version):
moduleVersion = self.root.find(module_name)
object = ET.SubElement(moduleVersion “object“)
ET.SubElement(object “FileRelativePath“).text = str(file_path)
ET.SubElement(object “FileSize“).text = str(file_size)
ET.SubElement(object “LastUpdateTime“).text = str(last_update_time)
ET.SubElement(object “Version“).text = str(version)
# self.save_change()
def deleteobject(self module_name file_name):
Xpath = “%s/object“ % module_name
objects = self.root.findall(Xpath)
moudleVersion = self.root.find(module_name)
for element in objects:
if element.find(‘FileRelativ
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2020-04-25 22:07 Client\
文件 19666 2020-04-25 21:49 Client\client.py
文件 243 2020-04-25 21:58 Client\start.bat
目录 0 2020-04-25 21:51 Client\TempFolder\
目录 0 2020-04-25 22:07 Client\venv\
目录 0 2020-04-25 18:42 Client\venv\Include\
目录 0 2020-04-25 22:07 Client\venv\Lib\
目录 0 2020-04-25 22:07 Client\venv\Lib\site-packages\
目录 0 2020-04-25 22:07 Client\venv\Lib\site-packages\__pycache__\
文件 314 2020-04-25 18:46 Client\venv\Lib\site-packages\__pycache__\easy_install.cpython-38.pyc
目录 0 2020-04-25 22:07 Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\
文件 4 2020-04-25 18:52 Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\INSTALLER
文件 1048 2020-04-25 18:52 Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\LICENSE
文件 2746 2020-04-25 18:52 Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\me
文件 947 2020-04-25 18:52 Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\RECORD
文件 8 2020-04-25 18:52 Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\top_level.txt
文件 110 2020-04-25 18:52 Client\venv\Lib\site-packages\certifi-2020.4.5.1.dist-info\WHEEL
目录 0 2020-04-25 22:07 Client\venv\Lib\site-packages\certifi\
文件 64 2020-04-25 18:52 Client\venv\Lib\site-packages\certifi\__init__.py
文件 243 2020-04-25 18:52 Client\venv\Lib\site-packages\certifi\__main__.py
目录 0 2020-04-25 22:07 Client\venv\Lib\site-packages\certifi\__pycache__\
文件 258 2020-04-25 18:52 Client\venv\Lib\site-packages\certifi\__pycache__\__init__.cpython-38.pyc
文件 421 2020-04-25 18:52 Client\venv\Lib\site-packages\certifi\__pycache__\__main__.cpython-38.pyc
文件 910 2020-04-25 18:52 Client\venv\Lib\site-packages\certifi\__pycache__\core.cpython-38.pyc
文件 284099 2020-04-25 18:52 Client\venv\Lib\site-packages\certifi\cacert.pem
文件 792 2020-04-25 18:52 Client\venv\Lib\site-packages\certifi\core.py
目录 0 2020-04-25 22:07 Client\venv\Lib\site-packages\chardet-3.0.4.dist-info\
文件 2174 2020-04-25 18:52 Client\venv\Lib\site-packages\chardet-3.0.4.dist-info\DEsc
文件 60 2020-04-25 18:52 Client\venv\Lib\site-packages\chardet-3.0.4.dist-info\entry_points.txt
文件 4 2020-04-25 18:52 Client\venv\Lib\site-packages\chardet-3.0.4.dist-info\INSTALLER
文件 3239 2020-04-25 18:52 Client\venv\Lib\site-packages\chardet-3.0.4.dist-info\me
............此处省略2689个文件信息
相关资源
- 二级考试python试题12套(包括选择题和
- pywin32_python3.6_64位
- python+ selenium教程
- PycURL(Windows7/Win32)Python2.7安装包 P
- 英文原版-Scientific Computing with Python
- 7.图像风格迁移 基于深度学习 pyt
- 基于Python的学生管理系统
- A Byte of Python(简明Python教程)(第
- Python实例174946
- Python 人脸识别
- Python 人事管理系统
- 基于python-flask的个人博客系统
- 计算机视觉应用开发流程
- python 调用sftp断点续传文件
- python socket游戏
- 基于Python爬虫爬取天气预报信息
- python函数编程和讲解
- Python开发的个人博客
- 基于python的三层神经网络模型搭建
- python实现自动操作windows应用
- python人脸识别(opencv)
- python 绘图(方形、线条、圆形)
- python疫情卡UN管控
- python 连连看小游戏源码
- 基于PyQt5的视频播放器设计
- 一个简单的python爬虫
- csv文件行列转换python实现代码
- Python操作Mysql教程手册
- Python Machine Learning Case Studies
- python获取硬件信息
评论
共有 条评论