Me gustaría simplemente imprimir un "hola mundo" en la consola de Python después de que el usuario llame al botón /.
Este es mi enfoque ingenuo:
@app.route('/button/')
def button_clicked():
print 'Hello world!'
return redirect('/')
Antecedentes: me gustaría ejecutar otros comandos de Python desde el matraz (no el shell). "imprimir" debería ser el caso más fácil. Creo que no he entendido un giro básico aquí. ¡Gracias por adelantado!
print
a la respuesta. Si está ejecutando el servidor de desarrollo desde una sesión de terminal, verá el resultado allí. Si lo está ejecutando a través de un servidor WSGI como uWSGI, la salida aparecerá en los registros.Respuestas:
Parece que lo ha resuelto, pero para otros que buscan esta respuesta, una forma fácil de hacerlo es imprimiendo en stderr. Puedes hacerlo así:
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 mostrará las cosas impresas en stderr en la consola. Para conocer otras formas de imprimir en stderr, consulte esta publicación de stackoverflow
fuente
from __future__ import print_function
tambiénfile=sys.stderr
para cada impresión? ¿Hay un camino corto para ello?from sys import stderr
,file=stderr
. En Python 3+, no es necesariofrom __future__ import print_function
, esa es la funcionalidad predeterminada.pprint(vars(myobject), sys.stderr)
También podemos usar el registro para imprimir datos en la consola.
Ejemplo:
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)
fuente
Creo que el problema principal con Flask es que stdout se almacena en búfer. Pude imprimir con
print('Hi', flush=True)
. También puede deshabilitar el almacenamiento en búfer configurando laPYTHONUNBUFFERED
variable de entorno (en cualquier cadena que no esté vacía).fuente