[英]how do decorated functions work in flask/python? (app.route)
[英]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
獲取輸出。
要在控制台中獲取INFO
、 WARNING
和ERROR
消息,可以使用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.