Я хотел бы просто напечатать "привет, мир" на консоли python после того, как пользователь вызвал кнопку /.
Это мой наивный подход:
@app.route('/button/')
def button_clicked():
print 'Hello world!'
return redirect('/')
Справочная информация: я хотел бы выполнять другие команды python из фляги (не оболочки). «печать» должно быть самым простым случаем. Думаю, я не понял здесь одного основного поворота. Заранее спасибо!
print
ответ. Если вы запускаете сервер разработки из сеанса терминала, вы увидите результат там. Если вы запускаете его через сервер WSGI, такой как uWSGI, вместо этого вывод будет отображаться в журналах.Ответы:
Похоже, у вас это получилось, но для других, которые ищут этот ответ, простой способ сделать это - распечатать в stderr. Сделать это можно так:
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 отобразит в консоли вещи, напечатанные на stderr. Чтобы узнать о других способах печати в stderr, см. Это сообщение stackoverflow
источник
from __future__ import print_function
такжеfile=sys.stderr
для каждой печати? есть короткий путь к этому?from sys import stderr
,file=stderr
. В Python 3+ это не нужноfrom __future__ import print_function
, это функция по умолчанию.pprint(vars(myobject), sys.stderr)
Мы также можем использовать ведение журнала для печати данных на консоли.
Пример:
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)
источник
Я думаю, что основная проблема Flask заключается в том, что stdout буферизуется. Я мог печатать с помощью
print('Hi', flush=True)
. Вы также можете отключить буферизацию, установив вPYTHONUNBUFFERED
переменной среды (любую непустую строку).источник