【问题标题】:Flask server won't stop on Ctrl+C in WindowsFlask 服务器不会在 Windows 中按 Ctrl+C 停止
【发布时间】:2020-12-05 06:01:40
【问题描述】:

我使用来自 Visual Studio 模板的 Flask 创建了一个默认的基本 Web 服务器。 当我从命令提示符启动它时,它会显示“按 Ctrl+C 退出”。当我按下 Ctrl+C 时,没有任何反应,服务器继续运行。

问题:有没有办法让 Flask 像宣传的那样在 Ctrl+C 上停止?

这是服务器启动的代码:

from os import environ
from myapp import app

if __name__ == '__main__':
    HOST = environ.get('SERVER_HOST', 'localhost')
    try:
        PORT = int(environ.get('SERVER_PORT', '5555'))
    except ValueError:
        PORT = 5555
    app.run(HOST, PORT)

【问题讨论】:

  • CTRL^C 有反应吗?
  • 即使在 Linux 中它也能继续运行...标记寻找答案。
  • 改用 CTRL+Break
  • @Vinny,完全没有反应,它只是继续运行。我注意到一件事 - 如果没有提供任何页面,那么 Ctrl+C 可以正常工作。如果至少处理了一个请求,则 Ctrl+C 无效。
  • @IrmendeJong - Ctrl+Break 有效!!非常感谢!

标签: python flask


【解决方案1】:

停止在 Windows 上运行的 Flask 服务器:

  1. Ctrl+c
  2. 如果 Flask 仍在运行,请尝试:Ctrl+Break
  3. 如果 Flask 仍在运行,请打开命令终端或 PowerShell 并运行:
taskkill /f /im python.exe

您还可以选择特定的 Python 进程来杀死:

> tasklist /fi "imagename eq python.exe"

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
python.exe                    1080 Console                    8     72,456 K
python.exe                   15860 Console                    8     73,344 K

> taskkill /F /pid 15860
SUCCESS: The process with PID 15860 has been terminated.
  1. 如果服务器只在本地计算机上运行,​​另一个选项是create an endpoint to kill the server
from flask import request
def shutdown_server():
    func = request.environ.get('werkzeug.server.shutdown')
    if func is None:
        raise RuntimeError('Not running with the Werkzeug Server')
    func()

@app.route('/shutdown', methods=['POST'])
def shutdown():
    shutdown_server()
    return 'Server shutting down...'

【讨论】:

    【解决方案2】:

    虽然这是一个奇怪的问题,但你可以通过在 linux 命令行中运行以下命令来杀死烧瓶:

    sudo kill servicename
    

    将服务名称替换为服务 PID

    您可以通过运行以下命令来获取它:

    sudo ps -A | grep "python(x)" 
    

    其中 x 是 python 版本

    【讨论】:

    • 谢谢,但这是针对 Linux 的,我在 Windows 上运行它
    • 在windows中你可以使用tasklist命令列出机器上正在运行的服务并用taskkill来停止它。阅读本文了解更多详情
    【解决方案3】:

    您应该在新的命令提示符窗口中使用 TASKKILL

    【讨论】:

      猜你喜欢
      • 2018-06-23
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 2017-11-29
      • 2012-06-22
      • 1970-01-01
      相关资源
      最近更新 更多