【发布时间】:2018-10-22 08:12:54
【问题描述】:
我想部署一个 Python 应用程序,然后可以在 127.0.0.1/::1 上的任何端口上启动一个内部网络服务器,当时任何端口都是空闲的。然后它应该启动一个带有指向本地 adhoc Web 服务器的 URL 的 Web 浏览器。
我现在的问题是:是否有任何 WSGI Web 服务器允许将它们动态绑定到空闲端口,然后使所选的端口号对程序可用?或者我可以自己创建一个监听socket,然后交给WSGI服务器使用?
【问题讨论】:
我想部署一个 Python 应用程序,然后可以在 127.0.0.1/::1 上的任何端口上启动一个内部网络服务器,当时任何端口都是空闲的。然后它应该启动一个带有指向本地 adhoc Web 服务器的 URL 的 Web 浏览器。
我现在的问题是:是否有任何 WSGI Web 服务器允许将它们动态绑定到空闲端口,然后使所选的端口号对程序可用?或者我可以自己创建一个监听socket,然后交给WSGI服务器使用?
【问题讨论】:
import wsgiref.simple_server
your_app = wsgiref.simple_server.demo_app
server = wsgiref.simple_server.make_server('127.0.0.1', 0, your_app)
_, port = server.server_address
# start the browser, perhaps on a separate thread after a delay
server.serve_forever()
使用Cheroot:可能有更简单的方法,但这种方法可行:
import threading, time, cheroot.wsgi
server = cheroot.wsgi.Server(('127.0.0.1', 0), your_app)
def get_port():
while not server.ready:
time.sleep(0.1)
_, port = server.bind_addr
# start the browser
threading.Thread(target=get_port).start()
server.start()
【讨论】:
simple_server 就足够了。非常感谢您的帮助!
import webbrowser 然后webbrowser.open_new_tab('http://{}:{}/'.format(webserver.server_address[0], webserver.server_address[1]))