Как в Django разрешить операторам печати работать с Apache WSGI?

«печать» работает только на сервере разработки. Но что, если я хочу, чтобы он работал в Apache? На тот случай, если я забуду прокомментировать это... Я хочу, чтобы все работало гладко, не вызывая ошибок.

(Просто распечатать ничего)


person TIMEX    schedule 22.08.2010    source источник


Ответы (4)


Что касается quick print, просто можно использовать:

print >>sys.stderr, 'log msg'

-- тогда, конечно же, оно попадает в error.log.

person Tomasz Zieliński    schedule 22.08.2010
comment
Еще один способ быстрой печати в stderr — sys.stderr.write('log mgs'). - person FedericoCapaldo; 25.07.2017

Смотрите сообщение Грэма Дамплтона:

person ars    schedule 22.08.2010
comment
В частности, обратите внимание, что при использовании mod_wsgi 3.X или более поздней версии это вообще не проблема, поскольку значение по умолчанию было изменено, чтобы разрешить использование sys.stdout, потому что слишком много людей просто ленились исправлять код. Просто надеюсь, что вам никогда не понадобится использовать какой-либо из адаптеров CGI/WSGI, потому что если вы будете печатать в sys.stdout с ними, что-то пойдет не так. - person Graham Dumpleton; 23.08.2010

То, что вы предлагаете, — Плохая идея, но если вы все равно настаиваете на этом, ознакомьтесь с директивы конфигурации mod_wsgi:

WSGIRestrictStdout

Description: Enable restrictions on use of STDOUT.
Syntax:      WSGIRestrictStdout On|Off
Default:     WSGIRestrictStdout On
Context:     server config
Module:      mod_wsgi.c

Хорошо работающее приложение Python WSGI никогда не должно пытаться записывать какие-либо данные непосредственно в sys.stdout или использовать оператор печати, не направляя его в альтернативный файловый объект. Это связано с тем, что способы размещения приложений WSGI, таких как CGI, используют стандартный вывод в качестве механизма отправки содержимого ответа обратно на веб-сервер. Если бы приложение WSGI записывало напрямую в sys.stdout, это могло бы помешать работе адаптера WSGI и привести к повреждению выходного потока.

В интересах обеспечения переносимости приложений WSGI mod_wsgi ограничивает доступ к sys.stdout и вызывает исключение при попытке явного использования sys.stdout.

Единственный раз, когда может потребоваться снять это ограничение, это исключительно из-за удобства использования оператора печати во время отладки приложения или если какой-либо сторонний модуль или приложение WSGI ошибочно использовали печать, когда это не должно. Если ограничения на использование sys.stdout сняты, любые данные, записанные в него, вместо этого будут отправлены в sys.stderr и появятся в файле журнала ошибок Apache.

person Craig Trader    schedule 22.08.2010

Если вы хотите записать операторы печати в журнал ошибок Apache, вы можете использовать sys.stderr:

import sys
sys.stderr.write('log mgs')

тогда это будет в файле журнала ошибок apache.

person suhailvs    schedule 29.08.2019