首页 > 解决方案 > 如何通过命令行 flask run 启动 Flask 和 Flask-SocketIO

问题描述

我从一个定义了多个 Web 服务的应用程序开始。我能够通过flask run命令行启动应用程序。之后,我集成了flask-sckoetio(即我添加了行from flask_socketio import SocketIO, emitsocketio = 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不再可能了?

标签: flask

解决方案


发生这种情况是因为变量__name__等于"__main__"仅当文件直接使用类似python file.py. 但是您的文件已导入,并且他的__name__变量设置为导入它们的模块的名称。

解决方案:

只需删除字符串if __name__ == "__main__":


推荐阅读