如何通过命令行flask run启动Flask和Flask-SocketIO

时间:2018-08-03 09:24:06

标签: flask

我从定义了几个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不再可能了?

2 个答案:

答案 0 :(得分:0)

您是否安装了错误消息中提到的eventletgevent

它们也在flask-socketIO documentation中的要求下列出。 尝试先安装它们。

安装其中一个后,您只需使用flask run即可启动应用程序。

答案 1 :(得分:0)

仅当使用诸如__name__之类的命令直接调用文件时,才因为变量"__main__"等于python file.py而发生这种情况。但是您的文件是导入的,并且他的__name__变量设置为导入文件的模块的名称。

解决方案:

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