Flask nu imprimă în consolă (Programare, Python, Flask)

X.Z a intrebat.

Sunt nou în flask și încerc să adaug informații de tipărire pentru a depana codul de pe partea serverului.Când lansez aplicația mea flask cu debug=True, nu pot obține nici o imprimare de informații în consolă.

Am încercat să folosesc în schimb logarea, dar fără succes. deci cum să depanez programul flask cu consola.

@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 -

Am rezolvat problema erorii 500 de pe partea serverului, acum cererea primește codul 200, iar consola afișează următoarele informații

$ 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 -

Încă nu am primit informații de la comanda print

Comentarii

  • Vă rugăm să vă actualizați întrebarea cu codul dvs.  > Por Raja Simon.
  • ce este eroarea 500? Puneți o comandă de imprimare imediat după def getJSONResult(): linie. –  > Por hjpotter92.
  • @hjpotter92 500 post request timeout. se pare că programele sunt blocate în getJSONResult și nu primesc o valoare de retur și blochează toate acțiunile, chiar dacă am pus print la prima linie a funcției. Încerc să returnez un simplu șir de caractere, totul funcționează, dar nu mă ajută să depanez problema… –  > Por X.Z.
  • @X.Z Care este mai exact problema – nu poți imprima în consolă în modul de depanare sau nu poți pune loguri, pentru că eu văd ambele lucruri în codul tău. –  > Por Nurjan.
5 răspunsuri
Nurjan

Încearcă asta și vezi dacă te ajută:

Pentru python2:

from __future__ import print_function
import sys

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

Pentru python3 nu este nevoie să importați din future print_function:

import sys

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

Vedeți dacă vă ajută să imprimați în consolă.

Comentarii

  • Dar care este cauza? –  > Por SerG.
  • nu sunt sigur de ce, dar acest lucru nu funcționează pentru mine în python 3.6.8 –  > Por Alan P.
benjy

Puteți forța să spălați stdout direct din print:

print('enter getJSONReuslt', flush=True)

În acest fel, nu trebuie să imprimați în sys.stderr (care trage apa în mod implicit).

Motivul pentru problema ta este tamponarea liniei. Line buffering face ca I/O să fie mai eficient, cu dezavantajul de a nu afișa imediat printurile în anumite condiții.

Comentarii

  • Pentru mine funcționează pe Windows –  > Por de sine stătător.
MrLeeh

În mod implicit, nivelul pentru logare este de avertizare. Deci, nu veți vedea un mesaj de logare de nivel DEBUG. Pentru a remedia acest lucru, activați jurnalizarea de depanare cu opțiunea basicConfig() din modulul de logare:

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

Comentarii

  • Funcționează. Pot vedea informațiile de logare, dar tot nu pot imprima nimic pe consolă.  > Por X.Z.
  • imprimarea ar trebui să funcționeze de fapt tot timpul. Poate că primiți o eroare înainte de a ajunge la funcția de imprimare. –  > Por MrLeeh.
  • @X.Z Poți să arăți stacktrace-ul complet atunci când apare eroarea 500? –  > Por Nurjan.
  • @Nurzhan, am rezolvat problema erorii 500 și am obținut cu succes datele returnate de la funcția getJSONResult, dar, în continuare, nu pot imprima nicio informație în consolă –  > Por X.Z.
  • Pot să fiu de acord. După app = Flask(__name__)nu pot imprima nimic. chiar și unele dintre clasele mele care extind MethodView nu sunt apelate. –  > Por TheRealChx101.
GiedriusL

Am avut aceeași problemă de imprimare. Folosind sys.stdout.flush() după print a rezolvat problema.

Comentarii

  • Acest lucru pare să funcționeze pentru mine, dar tot nu pot înțelege de ce. –  > Por Isky.
Bassirou Diaby

puteți utiliza instanța aplicației în modul de dezvoltare, deoarece nivelul de jurnalizare este setat la DEBUGapp.logger.info('This is info output')în modul de producție trebuie să utilizați un nivel mai sever sau puteți seta nivelul de logare la DEBUG

from flask import Flask
import logging

app = Flask(__name__)

logging.basicConfig(level=logging.DEBUG)

@app.route('/')
def hello_world():
    app.logger.info('Processing default request')
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

acest articol vorbește despre logarea în flask https://www.scalyr.com/blog/getting-started-quickly-with-flask-logging/