python-检查程序更新

Ben*_*abe 3 python xml

我已经开发了自己的程序,但是我希望能够动态地告诉用户该程序有可用的更新。该程序被设计为跨平台的,并且是用python编写的。将有两种类型的更新:

1)数据更新(包含运行程序所需信息的xml文件是更新)-这种更新类型的发生频率更高

2)系统更新(实际的可执行文件[已编译的python程序]已更新-这种更新类型不会经常发生

我需要能够连接到在线数据库,并将在那里发布的版本与当前程序版本进行比较,以查看是否有任何更新。如果服务器上有更新,则程序需要能够以最少的用户输入下载并安装该更新。我的问题是我如何告诉我的程序系统地检查更新,然后下载并安装它而不会崩溃该程序或不要求用户手动下载并安装它?

Ben*_*abe 6

一个简单的解决方法是将某种文件放在您的服务器上(假设是program.txt),并在其中放入有关最新版本的一些基本信息。然后,您有一个与程序一起下载的类似 txt 文件(比方说 version.txt),并在代码中放置一个函数来比较 version.txt 与 program.txt。如果它们相同,则您的程序是最新的。如果没有,您需要上网下载最新版本。

Python函数:

import Tkinter
import urllib

def updateCheck(self):
    update = False

    updateWindow = Tkinter.Toplevel()
    updateWindow.title(string="Update Checker")
    updateWindow.resizable(False, False)

    #Gets downloaded version
    versionSource = open('version.txt', 'r')
    versionContents = versionSource.read()

    #gets newest version
    updateSource = urllib.urlopen("http://www.suturesoft.com/Updates/craftbook.txt")
    updateContents = updateSource.read()

    #checks for updates
    for i in range(0,20):
        if updateContents[i] != versionContents[i]:
            dataLabel = Tkinter.Label(updateWindow,text="\n\nThere are data updates availible.\n\n")
            dataLabel.pack()
            update = True
            break
    for i in range(22,42):
        if updateContents[i] != versionContents[i]:
            versionLabel = Tkinter.Label(updateWindow,text="\n\nThere are version updates availible.\n\n")
            versionLabel.pack()
            update = True
            break
    if update == False:
        versionLabel = Tkinter.Label(updateWindow,text="\n\nYou are already running the most up to date version.\n\n")
        versionLabel.pack()
Run Code Online (Sandbox Code Playgroud)

proram.txt 和 version.txt:

data_version:10.11.12
exec_version:10.11.12
Run Code Online (Sandbox Code Playgroud)

在这种情况下,程序会告诉您该程序是最新的。


Joe*_*Day 5

设置一个简单的Web服务,该服务返回xml文件和可执行文件的当前版本号。让您的程序在启动时拨入该Web服务的目录,如果该Web服务返回较新的版本号,则该程序在其本地副本中具有的版本号,然后向用户显示一条消息,告知他们可以更新(或启动自动更新过程)。 。

  • 嗯,我可能没有给你可以剪切粘贴的东西,但是我怎么不回答你的问题呢? (2认同)