Chrome 将Flask Web应用程序用作Windows应用程序

eyh26e7m  于 2023-01-15  发布在  Go
关注(0)|答案(5)|浏览(180)

我们有一个使用Flask开发的Web应用程序,该应用程序在Windows服务器上运行,客户端连接到该服务器。现在,我们有一个使用案例,希望将服务器和客户端合并到一台笔记本电脑上,以便服务器和客户端代码一起运行,并使其显示为本地Windows应用程序。
基本上,我们现在有两个以前没有的要求:
1.必须能够从Python中启动浏览器。
1.必须能够在浏览器窗口关闭时终止Python( flask )应用程序。
我们已经成功地解决了第一个问题。第二个问题仍然难以解决。我们已经尝试终止werkzeug服务器,但Python代码仍然在运行。请向了解情况的人寻求帮助。

b1uwtaje

b1uwtaje1#

在更彻底地阅读了文档并试验了实现之后,我们发现下面的主要代码可以满足这个目标。

from multiprocessing import Process, freeze_support

def run_browser():
    import webbrowser
    chrome = webbrowser.get(r'C:\\Program\ Files\ (x86)\\Google\\Chrome\\Application\\chrome.exe --window-size=500,500 --app=%s')
    chrome.open('http://localhost:5000/gui')

def run_app():
    from app import webapp
    webapp.run() #debug=True) #, use_reloader=False)

if __name__ == '__main__':
    freeze_support()

    a = Process(target=run_app)
    a.daemon = True
    a.start()

    b = Process(target=run_browser)
    b.start()
    b.join()
8e2ybdfx

8e2ybdfx2#

我目前没有Windows客户端,所以我不能确切地测试我所建议的。
使用pywinauto可以检查窗口的名称。
您可以构建一个脚本,在后台对此进行检查,并在请求的浏览器窗口未打开时终止Flask应用程序。

from pywinauto.findwindows import find_windows
if not find_windows(best_match='YOURWINDOWNAMEHERE'):
    # Do your kill
qf9go6mv

qf9go6mv3#

这是使用flakwebgui的一种更简单的方法

from flaskwebgui import FlaskUI

app = Flask(__name__)
ui = FlaskUI(app)

ui.run()

flakwebgui-用Flask(或Django)创建桌面应用程序!
https://pypi.org/project/flaskwebgui/

4ioopgfo

4ioopgfo4#

这是一个用于flakwebgui的example
我已经使用pyinstaller将python-flask应用程序转换为可执行文件。
我使用Installforge将构建文件转换为安装文件。

8fsztsew

8fsztsew5#

我略为修改主要答复如下:

  • 使其与当前的Chrome版本工作
  • 使其开箱即用(包括最小的Flask服务器)。

这将在Chrome关闭时运行并退出服务器:

from multiprocessing import Process, freeze_support
from flask import Flask

def run_browser():
    import webbrowser
    chrome = webbrowser.get(r'"C:\Program Files\Google\Chrome\Application\chrome.exe" %s')
    chrome.open('http://localhost:5000/')

def run_app():
    app = Flask("test")
    @app.route("/")
    def index():
        return "Hello world"
    app.run()

if __name__ == '__main__':
    freeze_support()  # Add support for when a program which uses multiprocessing has been frozen to produce a Windows executable. (Has been tested with py2exe, PyInstaller and cx_Freeze.) One needs to call this function straight after the if __name__ == '__main__' line of the main module.

    a = Process(target=run_app)
    a.daemon = True
    a.start()

    b = Process(target=run_browser)
    b.start()
    b.join()

相关问题