资源简介
用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个文件信息
相关资源
- [Think.Python(2012.8)].Allen.B.Downey
- python程序设计(第三版最新高清版)
- 小甲鱼零基础学python课后习题和答案
- Python编写的超级马里奥游戏
- [PDF] Reinforcement Learning With Open AI Tens
- Deep Learning from Scratch中文名:深度学习
- Python编程:从入门到实践-PythonCrashC
- python爬取淘宝粽子销售数据并分析
- v-rep循迹小车-python远程控制
- Python神经网络编程.zip
- python满分实验报告:红心大战源代码
- python核心编程第三版
- [全套55讲]-鱼C论坛小甲鱼Python课后题
- Introducing Python;Modern Computing in Simple
- 《 流畅的python 》源代码 .zip
- python pycharm爬虫实战之百度贴吧爬取
- Python基础教程第3版电子版 文字版 中
- python教材
- pandas包python3.5版本 win64
- 用Python写网络爬虫.pdf 高清版
- Python Cookbook 第三版 中文+英文 高清带
- python写的一个小型计算器
- matplotlibwin32
- python菜鸟教程
- 精通Python设计模式 超清pdf 非扫描 带
- 人工智能-python机器学习实战高清完整
- 基于物品的协同过滤算法源码及数据
- 流畅的python_PDF 中文 高清 无密码
- Python编程从入门到实践.rar
- FlaskWeb开发:基于Python的Web应用开发实
评论
共有 条评论