我想在用户调用/ button之后向python控制台打印一个“hello world”。
这是我天真的做法:
@app.route('/button/')
def button_clicked():
print 'Hello world!'
return redirect('/')
背景:我想从flask(而不是shell)执行其他python命令。 “打印”应该是最简单的情况。 我相信我还没有理解这里的基本转折。 提前谢谢!
答案 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
获取输出。
要在控制台中获取INFO
,WARNING
和ERROR
消息,可以使用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)