繁体   English   中英

如何从 Flask @app.route 打印到 python 控制台

[英]How to print from Flask @app.route to python console

我想在用户调用 /button 后简单地将“hello world”打印到 python 控制台。

这是我天真的方法:

@app.route('/button/')
def button_clicked():
    print 'Hello world!'
    return redirect('/')

背景:我想从flask(不是shell)执行其他python命令。 “打印”应该是最简单的情况。 我相信我还没有理解这里的基本转折。 提前致谢!

一个简单的方法是打印到 stderr。 你可以这样做:

from __future__ import print_function # In python 2.7
import sys

@app.route('/button/')
def button_clicked():
    print('Hello world!', file=sys.stderr)
    return redirect('/')

Flask 将在控制台中显示打印到 stderr 的内容。 有关打印到 stderr 的其他方式,请参阅此 stackoverflow 帖子

我们还可以使用日志记录在控制台上打印数据。

例子:

import logging
from flask import Flask

app = Flask(__name__)

@app.route('/print')
def printMsg():
    app.logger.warning('testing warning log')
    app.logger.error('testing error log')
    app.logger.info('testing info log')
    return "Check your console"

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

我认为 Flask 的核心问题是 stdout 被缓冲。 我能够使用print('Hi', flush=True)进行print('Hi', flush=True) 您还可以通过设置PYTHONUNBUFFERED环境变量(任何非空字符串)来禁用缓冲。

我尝试运行@Viraj Wadate 的代码,但无法从控制台上的app.logger.info获取输出。

要在控制台中获取INFOWARNINGERROR消息,可以使用dictConfig对象为所有日志()创建日志记录配置:

from logging.config import dictConfig
from flask import Flask


dictConfig({
    'version': 1,
    'formatters': {'default': {
        'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
    }},
    'handlers': {'wsgi': {
        'class': 'logging.StreamHandler',
        'stream': 'ext://flask.logging.wsgi_errors_stream',
        'formatter': 'default'
    }},
    'root': {
        'level': 'INFO',
        'handlers': ['wsgi']
    }
})


app = Flask(__name__)

@app.route('/')
def index():
    return "Hello from Flask's test environment"

@app.route('/print')
def printMsg():
    app.logger.warning('testing warning log')
    app.logger.error('testing error log')
    app.logger.info('testing info log')
    return "Check your console"

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM