BottlePy 和 PyWebView

BottlePy and PyWebView

我正在尝试在 Bottle 中构建一个小应用程序,并认为我会尝试使用 pywebview 作为查看器。当我 运行 以下文件时,我得到了 webview 的两个实例 window。第一个显示页面,第二个显示纺车光标。关闭第二个 window 是关闭 Web 服务器,我相信,但不会终止线程。

为什么会出现两个 windows?

import sys
import threading

from bottle import Bottle, ServerAdapter
import webview


class MyWSGIRefServer(ServerAdapter):
    server = None

    def run(self, handler):
        from wsgiref.simple_server import make_server, WSGIRequestHandler
        if self.quiet:
            class QuietHandler(WSGIRequestHandler):
                def log_request(*args, **kw): pass
            self.options['handler_class'] = QuietHandler
        self.server = make_server(self.host, self.port, handler, **self.options)
        self.server.serve_forever()

    def stop(self):
        # self.server.server_close() <--- alternative but causes bad fd exception
        self.server.shutdown()

app = Bottle()
listen_addr = 'localhost'
listen_port = 8080

server = MyWSGIRefServer(host='localhost', port=8080)

@app.route('/')
def hello():
    return "Hello World!"




def start_server():
    app.run(server=server, reloader=True)


try:
    print(threading.enumerate())
    serverthread = threading.Thread(target=start_server)
    serverthread.daemon = True
    print("starting web server")
    serverthread.start()
    print("starting webview")
    webview.create_window('bottle test', "http://localhost:8080/")
    print("webview closed. closing server")

    sys.exit()
    server.stop()
except Exception as ex:
    print(ex)

问题是在 运行 服务器时使用 reloader=True。将此设置为 False 可防止第二个 window 出现。