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

时间:2015-09-13 14:07:29

标签: python flask

我想在用户调用/ button之后向python控制台打印一个“hello world”。

这是我天真的做法:

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

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

4 个答案:

答案 0 :(得分:89)

似乎你已经解决了问题,但对于寻找这个答案的其他人来说,一个简单的方法就是打印到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的其他方式,请参阅this stackoverflow post

答案 1 :(得分:13)

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

示例:

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)

答案 2 :(得分:1)

我认为Flask的核心问题是stdout会被缓冲。我可以使用print('Hi', flush=True)进行打印。您还可以通过设置PYTHONUNBUFFERED环境变量来禁用缓冲。

答案 3 :(得分:0)

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

要在控制台中获取INFOWARNINGERROR消息,可以使用dictConfig对象为所有日志({{3} }):

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)