web-dev-qa-db-fra.com

Flask ne s'imprime pas sur la console

Je suis nouveau dans flask et j'essaie d'ajouter des informations d'impression pour déboguer le code côté serveur. Lorsque je lance mon flask app avec debug = True, je ne peux obtenir aucune information imprimée sur la console

J'ai essayé d'utiliser la journalisation à la place, mais sans succès. Alors, comment déboguer le programme flask avec console).

@app.route('/getJSONResult', methods=['GET', 'POST'])
def getJSONResult():

    if request.method == 'POST':
        uut = request.form['uut']
        notes = request.form['notes']
        temperature = request.form['temperature']

        logging.info("enter getJSONReuslt")
        print('enter getJSONReuslt')
        filter_by_query = {k: v for k, v in {
            'uut': uut, 'notes': notes, 'temperature': temperature}.items() if v != ""}
        s = session.query(UUT_TEST_INFO).filter_by(**filter_by_query).first()
        return jsonify(s.serialize)

if __name__ == '__main__':
    app.secret_key = ''.join(random.choice(
        string.ascii_uppercase + string.digits) for x in range(32))
    app.debug = True
    app.run(Host='127.0.0.1', port=5000)


> 127.0.0.1 - - [07/Jun/2017 15:20:48] "GET /qyer HTTP/1.1" 200 -
> 127.0.0.1 - - [07/Jun/2017 15:20:48] "GET /static/css/bootstrap.min.css HTTP/1.1" 200 -
> 127.0.0.1 - - [07/Jun/2017 15:20:48] "GET /static/js/bootstrap.min.js HTTP/1.1" 200 -
> 127.0.0.1 - - [07/Jun/2017 15:20:51] "GET /static/css/bootstrap.min.css.map HTTP/1.1" 200 -
> 127.0.0.1 - - [07/Jun/2017 15:21:58] "POST /getJSONResult HTTP/1.1" 500 -

J'ai corrigé le problème d'erreur côté serveur 500, maintenant je demande un code 200 et la console affiche les informations suivantes

$ python project.py
INFO:werkzeug: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
INFO:werkzeug: * Restarting with stat
WARNING:werkzeug: * Debugger is active!
INFO:werkzeug: * Debugger pin code: 158-624-607
INFO:werkzeug:127.0.0.1 - - [08/Jun/2017 11:33:33] "GET /qyer HTTP/1.1" 200 -
INFO:root:Enter getJSONResult
INFO:werkzeug:127.0.0.1 - - [08/Jun/2017 11:33:43] "POST /getJSONResult HTTP/1.1" 200 -

Toujours pas d'informations de la commande d'impression

20
X.Z

Essayez ceci et voyez si cela aide:

Pour python2:

from __future__ import print_function
import sys

print('This is error output', file=sys.stderr)
print('This is standard output', file=sys.stdout)

Pour python3, vous n'avez pas besoin d'importer de future print_function:

import sys

print('This is error output', file=sys.stderr)
print('This is standard output', file=sys.stdout)

Voyez si cela aide d’imprimer sur la console.

29
Nurjan

Par défaut, le niveau de journalisation est warning. Donc, vous ne verrez pas de message de journalisation de niveau DEBUG. Pour résoudre ce problème, activez simplement la journalisation de débogage avec la fonction basicConfig() du module de journalisation:

import logging
logging.basicConfig(level=logging.DEBUG)
11
MrLeeh

Avait le même problème d'impression. Utiliser sys.stdout.flush() après le print a résolu le problème.

3
GiedriusL

Vous pouvez forcer à vider la sortie standard directement de l’impression:

print('enter getJSONReuslt', flush=True)

De cette façon, vous n'avez pas à imprimer sur sys.stderr (qui se vide par défaut).

La raison de votre problème est la mise en mémoire tampon des lignes. La mise en mémoire tampon des lignes rend les E/S plus efficaces avec l'inconvénient de ne pas afficher immédiatement les impressions dans certaines conditions.

2
benjy