从IPython运行Flask引发了SystemExit

时间:2018-03-23 18:38:19

标签: python flask ipython jupyter

我正在尝试从IPython运行我的Flask应用程序。但是,它失败并出现SystemExit错误。

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, World!'

if __name__ == '__main__':
   app.run(debug=True)

使用IPython运行此操作会显示以下错误:

SystemExit                                Traceback (most recent call last)
<ipython-input-35-bfd7690b11d8> in <module>()
     17 
     18 if __name__ == '__main__':
---> 19    app.run(debug = True)

/Users/ravinderbhatia/anaconda/lib/python2.7/site-packages/flask/app.pyc in run(self, host, port, debug, **options)
    770         options.setdefault('use_debugger', self.debug)
    771         try:
--> 772             run_simple(host, port, self, **options)
    773         finally:
    774             # reset the first request information if the development server

/Users/ravinderbhatia/anaconda/lib/python2.7/site-packages/werkzeug/serving.py in run_simple(hostname, port, application, use_reloader, use_debugger, use_evalex, extra_files, reloader_interval, reloader_type, threaded, processes, request_handler, static_files, passthrough_errors, ssl_context)
    687         from ._reloader import run_with_reloader
    688         run_with_reloader(inner, extra_files, reloader_interval,
--> 689                           reloader_type)
    690     else:
    691         inner()

/Users/ravinderbhatia/anaconda/lib/python2.7/site-packages/werkzeug/_reloader.py in run_with_reloader(main_func, extra_files, interval, reloader_type)
    248             reloader.run()
    249         else:
--> 250             sys.exit(reloader.restart_with_reloader())
    251     except KeyboardInterrupt:
    252         pass

SystemExit: 1

4 个答案:

答案 0 :(得分:8)

您正在使用Jupyter Notebook或IPython来运行开发服务器。您还启用了调试模式,默认情况下启用重新加载器。重新加载器尝试重新启动IPython无法处理的进程。

最好使用flask命令运行开发服务器。

export FLASK_APP=my_app.py
export FLASK_DEBUG=1
flask run

如果您仍想使用不再推荐的python,请使用普通app.run解释程序来运行该应用程序。

python my_app.py

如果您想从Jupyter呼叫app.run,请禁用重新加载器。

app.run(debug=True, use_reloader=False)

答案 1 :(得分:1)

使用这个,对我来说效果很好:

app.run(debug = True,use_reloader = False)

答案 2 :(得分:0)

我也遇到了同样的问题,因此删除了debug=True就解决了。这是我的密码

from flask import Flask

app=Flask(__name__)

@app.route('/')

def home():
    return "Homepage Here"

if __name__=="__main__":
    app.run()

答案 3 :(得分:0)

在Google Colab内部,使用此方法:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello(): return "Hello World"

import portpicker
port = portpicker.pick_unused_port()
from google.colab import output
output.serve_kernel_port_as_window(port)

from gevent.pywsgi import WSGIServer
host='localhost'
app_server = WSGIServer((host, port), app)
app_server.serve_forever()

一些解释:

  • portpicker-仅选择randon自由端口
  • serve_kernel_port_as_window-像是从本地主机到外部访问链接的代理,它将打印在输出上。威尔可能更喜欢使用output.serve_kernel_port_as_iframe(port)在iframe中展示
  • gevent.pywsgi-只是简单的WSGIServer