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
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.
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)
Avait le même problème d'impression. Utiliser sys.stdout.flush()
après le print
a résolu le problème.
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.