如何解决更新后如何重启kivy应用退出旧版本并执行新版本
下载新版本的应用程序后,如何重新启动kivy应用程序?
我正在开发一个使用kivy框架的python GUI应用程序,我刚刚向我的应用程序添加了自动更新功能,该功能可以安全地下载,验证和提取自身的更新版本。完成这些升级步骤后,我向用户显示一个模式对话框,要求他们单击按钮以将应用程序重新启动到较新的版本。
解决方法
在python中,您可以使用os.execv()
退出当前进程并将其替换为另一个执行。
以下命令演示了如何在Debian 10中使用kivy做到这一点:
sudo apt-get -y install python3 python3-pip python3-virtualenv python3-setuptools
sudo dpkg -l | grep python
python3 -m virtualenv --python=python3.7 /tmp/virtualenv/kivy_test
/tmp/virtualenv/kivy_test/bin/python3 -m pip install --upgrade pip kivy
/tmp/virtualenv/kivy_test/bin/python3 -m pip list
source /tmp/virtualenv/kivy_test/bin/activate
tmpDir=`mktemp -d`
pushd "${tmpDir}"
cat << EOF > helloWorldOne.py
#!/usr/bin/env python3
import kivy,os
from kivy.app import App
from kivy.uix.label import Label
from kivy.clock import Clock
class MyApp(App):
def build(self):
Clock.schedule_once( self.restart,1 )
return Label(text='Hello World One!')
def restart(self,dt):
os.execv( 'helloWorldTwo.py',['helloWorldTwo.py'] )
if __name__ == '__main__':
MyApp().run()
EOF
cat << EOF > helloWorldTwo.py
#!/usr/bin/env python3
import kivy,os
from kivy.app import App
from kivy.uix.label import Label
from kivy.clock import Clock
class MyApp(App):
def build(self):
return Label(text='Hello World Two!')
if __name__ == '__main__':
MyApp().run()
EOF
chmod +x helloWorld*.py
./helloWorldOne.py
popd
在上面执行./helloWorldOne.py
时,将显示一个窗口(“旧版本”)。延迟1秒后,将执行restart()
函数(它可以绑定到按钮),该函数调用os.execv()
。
helloWorldOne.py
应用程序窗口已关闭,并由helloWorldTwo.py
应用程序窗口取代。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。