Назад | Перейти на главную страницу

операторы печати wsgi и python

Мне стало известно, что операторы печати в моем приложении django вызывают ошибку и сбой wsgi. Не просматривая весь мой код и не удаляя / не комментируя операторы печати, есть ли способ отключить их при запуске wsgi. Он должен быть максимально простым.

Спасибо

Используйте параметр WSGIRestrictStdout:

WSGIRestrictStdout Off

или замените sys.stdout на sys.stderr в звездном скрипте Django WSGI:

import sys
sys.stdout = sys.stderr

Запись в стандартный вывод

Ни один компонент приложения WSGI, претендующий на переносимость, не должен выполнять запись в стандартный вывод. То есть приложение не должно использовать оператор печати Python без направления вывода в какой-либо альтернативный поток. Приложение также не должно писать напрямую в sys.stdout.

В общем, лучше использовать ведение журнала для любого вида вывода отладки в веб-приложении и никогда не использовать операторы печати вообще. Или используйте их в виде:

print >> environ['wsgi.errors'], "message to be printed"

Лучше всего избавиться от sys.stdout, на всякий случай сделав его копией sys.stderr.

Если вы разрабатываете на сервере UNIX, у вас могут быть открыты два окна терминала, одно для запуска Django, а второе для выполнения

tail -f loggingfile

И вы получаете почти тот же эффект, что и при использовании операторов печати, но вы можете использовать стандартный logging модуль для генерации вывода, а в производственном приложении вы просто измените настройку фильтра, чтобы не отображать сообщения уровня DEBUG.