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

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

这是我天真的想法:

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

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

164059 次浏览

一个简单的方法是打印到 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 的内容

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

例如:

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)

I think the core issue with Flask is that stdout gets buffered. I was able to print with print('Hi', flush=True). You can also disable buffering by setting the PYTHONUNBUFFERED environment variable (to any non-empty string).

我尝试运行@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)