Chciałbym po prostu wydrukować "hello world" w konsoli Pythona po wywołaniu przycisku / przez użytkownika.
To jest moje naiwne podejście:
@app.route('/button/')
def button_clicked():
print 'Hello world!'
return redirect('/')
Tło: Chciałbym wykonywać inne polecenia Pythona z flaski (nie powłoki). „Drukuj” powinno być przypadkiem najłatwiejszym. Wydaje mi się, że nie zrozumiałem tutaj podstawowego zwrotu. Z góry dziękuję!
print
do odpowiedzi. Jeśli uruchamiasz serwer deweloperski z sesji terminala, zobaczysz tam dane wyjściowe. Jeśli uruchamiasz go przez serwer WSGI, taki jak uWSGI, dane wyjściowe pojawią się w dziennikach.Odpowiedzi:
Wygląda na to, że masz już to opracowane, ale dla innych, którzy szukają tej odpowiedzi, prostym sposobem jest wydrukowanie na stderr. Możesz to zrobić w ten sposób:
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 wyświetli w konsoli rzeczy wydrukowane na stderr. Aby poznać inne sposoby drukowania na stderr, zobacz ten post o przepływie stosu
źródło
from __future__ import print_function
równieżfile=sys.stderr
przy każdym wydruku? czy jest do tego krótka droga?from sys import stderr
,file=stderr
. W Pythonie 3+ nie potrzebujeszfrom __future__ import print_function
, to jest domyślna funkcjonalność.pprint(vars(myobject), sys.stderr)
Za pomocą logowania możemy również wydrukować dane na konsoli.
Przykład:
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)
źródło
Myślę, że podstawowy problem z Flaskiem polega na tym, że standardowe wyjście jest buforowane. Mogłem drukować z
print('Hi', flush=True)
. Możesz również wyłączyć buforowanie, ustawiającPYTHONUNBUFFERED
zmienną środowiskową (na dowolny niepusty ciąg).źródło