web-dev-qa-db-fra.com

Comment imprimer à partir de Flask @ app.route vers la console python

Je voudrais simplement imprimer un "hello world" sur la console python après que le bouton/soit appelé par l'utilisateur.

C'est mon approche naïve:

@app.route('/button/')
def button_clicked():
    print 'Hello world!'
    return redirect('/')

Arrière-plan: je voudrais exécuter d'autres commandes python à partir de flask (pas de Shell). "print" devrait être le cas le plus simple. Je crois que je n'ai pas compris une torsion fondamentale ici. Merci d'avance!

65
Robert Filter

Il semble que tout se passe bien, mais pour les autres à la recherche de cette réponse, un moyen facile de le faire est d’imprimer sur stderr. Vous pouvez faire ça comme ça:

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 affichera les choses imprimées sur stderr dans la console. Pour d’autres modes d’impression sur stderr, voir cet article stackoverflow

93
Gabe

Nous pouvons également utiliser la journalisation pour imprimer des données sur la console.

Exemple:

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 __== '__main__':
    app.run(debug=True)
15
Viraj.Hadoop

Je pense que le problème principal de Flask est que stdout est mis en mémoire tampon. J'ai pu imprimer avec print('Hi', flush=True). Vous pouvez également désactiver la mise en mémoire tampon en définissant la variable d'environnement PYTHONUNBUFFERED.

0
Chris