flask - 如何通过命令行 flask run 启动 Flask 和 Flask-SocketIO
问题描述
我从一个定义了多个 Web 服务的应用程序开始。我能够通过flask run
命令行启动应用程序。之后,我集成了flask-sckoetio(即我添加了行from flask_socketio import SocketIO, emit
和socketio = SocketIO(app)
),现在我无法再通过flask run
.
from flask import Flask, request, abort
from flask_socketio import SocketIO, emit
app = Flask(__name__)
socketio = SocketIO(app)
@app.route('/do_sth', methods=['POST'])
def do_sth():
return ""
我在控制台上收到以下消息:
* Serving Flask-SocketIO app "webservices.py"
* Forcing debug mode off
WebSocket transport not available. Install eventlet or gevent and gevent-websocket for improved perform
ance.
c:\program files\python36\lib\site-packages\flask_socketio\__init__.py:496: Warning: Silently ignoring
app.run() because the application is run from the flask command line executable. Consider putting app.
run() behind an if __name__ == "__main__" guard to silence this warning.
use_reloader=use_reloader, **kwargs)
所以我将我的代码更新为:
from flask import Flask, request, abort
from flask_socketio import SocketIO, emit
app = Flask(__name__)
socketio = SocketIO(app)
@app.route('/do_sth', methods=['POST'])
def do_sth():
return ""
if __name__ == '__main__':
socketio.run(app)
但是我仍然收到相同的错误消息并且服务器没有启动。但是,如果我只是执行脚本,一切正常。但为什么flask run
不再可能了?
解决方案
发生这种情况是因为变量__name__
等于"__main__"
仅当文件直接使用类似python file.py
. 但是您的文件已导入,并且他的__name__
变量设置为导入它们的模块的名称。
解决方案:
只需删除字符串if __name__ == "__main__":
推荐阅读
- c - 使用指定的初始化器范围在 C 中初始化结构数组的所有结构成员
- artifactory - Artifactory Filestore 具有 root 和 artifactory 用户条目
- node.js - Node 的 Seriate 模块是否安全?
- java - 使用 Spring 数据休息 @RepositoryRestResource 创建休息端点时是否需要注释 @EnableMongoRepositories
- r - 使用一些约束进行聚类
- c# - 关于 MVC 控制器与单独的 Web API 的架构,有多少项目?
- javascript - 图像在一秒钟后在图库滑块中消失
- html - 在 django 中设置自定义用户注册表单的样式
- php - 如何将 php rest api 与 reactjs 一起使用?
- c# - JSON .NET - 将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1