Eu gostaria de simplesmente imprimir um "hello world" no console do python após o botão / ser chamado pelo usuário.
Esta é minha abordagem ingênua:
@app.route('/button/')
def button_clicked():
print 'Hello world!'
return redirect('/')
Contexto: Eu gostaria de executar outros comandos python a partir do flask (não do shell). "imprimir" deve ser o caso mais fácil. Eu acredito que não entendi uma torção básica aqui. Desde já, obrigado!
print
para a resposta. Se você estiver executando o servidor de desenvolvimento a partir de uma sessão de terminal, verá a saída lá. Se você estiver executando-o por meio de um servidor WSGI, como uWSGI, a saída aparecerá nos logs.Respostas:
Parece que você já resolveu, mas para outras pessoas que procuram essa resposta, uma maneira fácil de fazer isso é imprimindo em stderr. Você pode fazer isso assim:
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('/')
O Flask exibirá as coisas impressas em stderr no console. Para outras maneiras de imprimir em stderr, consulte esta postagem sobre fluxo de pilha
fonte
from __future__ import print_function
tambémfile=sys.stderr
para cada impressão? existe um caminho curto para isso?from sys import stderr
,file=stderr
. No Python 3+, você não precisafrom __future__ import print_function
, essa é a funcionalidade padrão.pprint(vars(myobject), sys.stderr)
Também podemos usar o registro para imprimir dados no console.
Exemplo:
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)
fonte
Acho que o principal problema com o Flask é que o stdout fica armazenado em buffer. Consegui imprimir com
print('Hi', flush=True)
. Você também pode desabilitar o armazenamento em buffer definindo aPYTHONUNBUFFERED
variável de ambiente (para qualquer string não vazia).fonte
Tentei executar o código de @Viraj Wadate, mas não consegui obter a saída
app.logger.info
no console.Para chegar
INFO
,WARNING
eERROR
mensagens no console, odictConfig
objeto pode ser usado para criar configuração de registo para todos os logs ( fonte ):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)
fonte