当用户调用 /button 时,我想简单地在 Python 控制台上打印“hello world”。
这是我的朴素方法:
@app.route('/button/')
def button_clicked():
print 'Hello world!'
return redirect('/')
背景:我想从Flask中执行其他的Python命令(不是shell)。 “print”应该是最简单的情况。 我相信我在这里没有理解一个基本的要点。
一个简单的方法是将内容打印到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帖子
from __future__ import print_function
和 file=sys.stderr
到每个打印语句吗?有没有更简单的方法? - e271p314from sys import stderr
和 file=stderr
来减少一些重复。在 Python 3+ 中,你不需要使用 from __future__ import print_function
,因为它是默认功能。 - phoenixpprint(vars(myobject), sys.stderr)
- jcrollimport 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)
命令来打印信息。你也可以通过将 PYTHONUNBUFFERED
环境变量设置为任何非空字符串来禁用缓冲。
app.logger.info
的输出。
为了在控制台中获取INFO
,WARNING
和ERROR
信息,可以使用dictConfig
对象为所有日志创建日志配置(参考来源:source):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)
print
路由到响应中。如果您从终端会话运行开发服务器,则将在那里看到输出。如果您通过WSGI服务器(如uWSGI)运行它,则输出将出现在日志中。 - dirn