사용자가 / button을 호출 한 후 파이썬 콘솔에 “hello world”를 간단히 인쇄하고 싶습니다.
이것은 내 순진한 접근 방식입니다.
@app.route('/button/')
def button_clicked():
print 'Hello world!'
return redirect('/')
배경 : 플라스크 (쉘이 아님)에서 다른 파이썬 명령을 실행하고 싶습니다. “인쇄”가 가장 쉬운 경우입니다. 나는 여기서 기본적인 비틀기를 이해하지 못했다고 생각합니다. 미리 감사드립니다!
답변
당신이 해결 한 것처럼 보이지만이 답변을 찾는 다른 사람들에게는 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)
. 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)