使用PyWebIO开发桌面应用时如何从Web界面触发服务端安全退出
PyWebIO 桌面应用服务端退出解决方案
方案1:添加手动退出按钮(最通用)
直接在页面中添加退出按钮,点击后终止整个Python进程,实现代码如下:
from pywebio import start_server from pywebio.output import put_button import os import signal # 方式A:直接终止进程 def exit_app(): # 直接终止整个Python进程,无残留 os._exit(0) # 方式B:优雅终止(模拟Ctrl+C,服务会处理完现有请求再退出) def graceful_exit(): os.kill(os.getpid(), signal.SIGINT) def app(): # 你的业务逻辑 put_button("退出应用", onclick=exit_app) # 按需替换回调函数即可 if __name__ == "__main__": start_server(app, port=12345, debug=False)
注意:不要使用
sys.exit()实现退出,该方法只会终止当前处理请求的子线程,不会停止整个PyWebIO服务进程。
方案2:关闭浏览器自动退出(桌面场景最优)
如果你是专门开发桌面应用,建议直接使用PyWebIO内置的桌面启动器,开启auto_close参数后,用户关闭浏览器窗口时服务端会自动退出,无需额外添加按钮:
from pywebio.platform.desktop import start_desktop_app def app(): # 你的业务逻辑 pass if __name__ == "__main__": start_desktop_app( app, port=12345, auto_close=True, # 窗口关闭自动退出服务 debug=False )
注意事项
- 打包发布时必须关闭
debug模式,debug模式下自动退出逻辑可能失效 - 如果需要在退出前执行清理操作,可以在退出回调中先运行你的清理逻辑,再调用终止进程的代码
内容的提问来源于stack exchange,提问作者mhucka
相关产品推荐
相关产品推荐

