我从一个定义了几个has服务的应用程序开始。我能够通过命令行上的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不再可能了呢?
发布于 2018-08-23 18:40:14
发生这种情况的原因是,只有在使用python file.py等命令直接调用文件时,变量__name__才等于"__main__"。但是您的文件被导入了,并且他的__name__变量被设置为导入它们的模块的名称。
解决方案:
只需删除字符串if __name__ == "__main__":
发布于 2018-08-20 18:21:53
您是否安装了错误消息中提到的eventlet或gevent?
它们也列在flask-socketIO documentation中的requirements下。请先尝试安装它们。
安装其中一个之后,您可以只使用flask run启动您的应用程序。
https://stackoverflow.com/questions/51669415
复制相似问题