我试图从另一个模块运行一个烧瓶服务器,然后关闭服务器(这不是应用程序的要点),目前webserver.py的代码如下所示
from flask import Flask, render_template
from flask_classful import FlaskView
import os
from werkzeug.utils import secure_filename
from flask import request
host = 'localhost'
debug = True
app = Flask (__name__)
app.config
@app.route('/')
def main():
return render_template("index.html")
def run():
if __name__ == 'Refactor2':
app.run(ssl_context = (r"path_to_cert", r"path_to_key"), host = "localhost", port = 443)
def shutdown_server():
func = request.environ.get('werkzeug.server.shutdown')
if func is None:
raise RuntimeError('Not running with the Werkzeug Server')
func()
def shutdownServer():
shutdown_server()
return "Server is shutting down"然后,我尝试在以下模块(名为Refactor2)中运行这个程序:
import webserver
class buyer:
def __init__(self, email, password):
self.email = email
self.password = password
def server_run(self):
run()
print("Server has been started")但是,服务器不运行,我无法导航到网页。没有显示错误消息。
发布于 2021-02-26 18:52:22
似乎是一个不寻常的方式来启动一个酒瓶应用程序,但撇开这一点.
假设您正在使用python Refactor2.py运行这个程序,那么__name__将是'webserver'。
这可以用一个很小的例子来演示:
$ cat webserver.py
def run():
print (__name__)
$ cat Refactor2.py
import webserver
webserver.run()
$ python Refactor2.py
webserver因此,在您的webserver模块中,您可以这样做:
def run():
if __name__ == 'webserver':
app.run(ssl_context = (r"path_to_cert", r"path_to_key"), host = "localhost", port = 443)或者只是:
def run():
app.run(ssl_context = (r"path_to_cert", r"path_to_key"), host = "localhost", port = 443)并称之为:
import webserver
# ...
class buyer:
# ...
def server_run(self):
webserver.run()
print("Server has been started")当然,在服务器( webserver.run调用)完成和服务器停止之前,不会真正到达‘服务器已经启动’。
同样,这似乎是启动应用程序的一种奇怪方式。我建议您研究如何在生产中运行Flask的文档,因为您试图获得的似乎是编排系统的工作,而不是python进程本身。在生产env中,您应该像gunicorn一样使用WSGI服务器,而不是开发服务器(app.run)。当然,也许你已经知道了;)
发布于 2021-02-26 18:45:48
__name__给出了当前模块的名称。因此,在您的run()方法中,__name__可能解析为webserver。我建议将名称作为变量从run()从server_run()传递给
webserver.py
def run(name):
if name == 'Refactor2':
app.run(ssl_context = (r"path_to_cert", r"path_to_key"), host = "localhost", port = 443)Refactor2
import webserver
class buyer:
def __init__(self, email, password):
self.email = email
self.password = password
def server_run(self):
run(__name__)
print("Server has been started")注意,如果Refactor2在包中,您可能会得到一个虚线模块名,比如‘src.Refactor 2’。最好传递一个更显式的名称来运行,就像重命名Refactor2一样,您也需要在webserver.py中更新硬代码。有点像
def server_run(self):
webserver.run('buyer')
print("Server has been started")和
(webserver.py)
def run(name):
if name == 'buyer':
app.run(ssl_context = (r"path_to_cert", r"path_to_key"), host = "localhost", port = 443)编辑:不确定您是否提供了完整的代码示例,但看起来您可能没有在server_run()中调用正确的server_run()方法--它看起来应该在webserver模块上调用,我编辑了答案以反映
https://stackoverflow.com/questions/66390520
复制相似问题