首页 > 解决方案 > Flask 在标准输出被重定向时禁用标准输出

问题描述

我想使用我的 Flask 应用程序的标准输出将状态信息传达给通过管道连接的其他进程,但事实证明,当标准输出被重定向时,Flask 会以某种方式禁用标准输出。

这是我的示例 Flask 应用程序:

from flask import Flask
app = Flask(__name__)

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

def prepare():
    # Do some preparation work
    pass

prepare()

print('ready')

现在比较两种不同但非常相似的启动此应用程序的方式:

$ FLASK_APP=my_app.py flask run 2>/dev/null
 * Serving Flask app "my_app.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
ready

当标准输出被重定向时,我的状态消息被静音(但应用程序在通过 Web 界面访问时可以正常工作):

$ FLASK_APP=my_app.py flask run 2>/dev/null | cat
 * Serving Flask app "my_app.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off

有人知道如何允许标准输出消息通过 Flask 应用程序中的管道吗?

我不能为此目的使用 Web 界面,因为我有一个装饰有状态的函数@before_first_request,查询状态会触发它,这是我不想要的。

版本信息:

$ flask --version
Python 3.6.12
Flask 1.1.2
Werkzeug 1.0.1

标签: pythonflask

解决方案


推荐阅读