У меня есть приложение Django на сервере Linux. В одном из представлений, некоторой форме print
команда выполняется, и некоторая строка печатается. Как я могу узнать, какова печатная строка была? Есть ли, некоторые входят в систему, которым сохранены эти вещи?
Вывод должен быть в терминале, где был запущен django. (если вы не запустили его напрямую, я не верю, что есть способ его прочитать)
Как указано в связанной ссылке, лучше не использовать print
, потому что это может вызвать исключения! Но это не единственная причина: существуют модули (например, logging ), созданные для таких целей, и у них есть намного больше возможностей.
Этот сайт (даже если он относится к 2008 году) подтверждает мои утверждения:
Если вы хотите знать, что происходит внутри представления, самый быстрый способ - добавить оператор печати. Сервер разработки выводит любые операторы печати непосредственно на терминал; это серверная альтернатива JavaScript alert ().
Если вы хотите быть немного более сложным в ведении журнала, стоит обратиться к модулю ведения журнала Python (часть стандартной библиотеки). Вы можете настроить его в своем settings.py: здесь он описывает, что делать (смотрите на сайте)
Для целей отладки вы также можете включить режим отладки или использовать панель инструментов django-debug .
Надеюсь, это поможет! :)
Печать отлично отображается с "./manage.py runserver" или другими вариантами - как упоминает Джошуа, она отображается в терминале, с которого вы ее запустили. Если вы запускаете FCGI из cron или чего-то подобного, он просто сбрасывается в ничто, и вы полностью его теряете.
Для тех мест, где я хочу «печатать» предупреждения или уведомления, я использую экземпляр логгера python, который отправляет в syslog, чтобы захватить вывод и поместить его куда-нибудь. Я создаю экземпляр журнала в одном из модулей по мере его загрузки - models.py было местом, которое я выбрал, просто для его удобства, и я знал, что он всегда будет оцениваться до того, как поступят запросы.
import logging, logging.handlers
logger = logging.getLogger("djangosyslog")
hdlr = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON)
formatter = logging.Formatter('%(filename)s: %(levelname)s: %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
Затем, когда вы захотите чтобы вызвать сообщение для регистратора в ваших представлениях или что-то еще:
logger = logging.getLogger("djangosyslog")
logging.warning("Protocol problem: %s", "connection reset", extra=d)
Там .error (), .critical () и другие - ознакомьтесь с http://docs.python.org/library/logging.html за мельчайшими подробностями.
Панель инструментов отладки Роба Хадсона великолепна, если вы ищете эту отладочную информацию - я сам часто использую ее при разработке. Он предоставляет вам данные о текущем запросе и ответе, включая SQL, используемый для создания любой данной страницы.Вы можете вставить в эти данные как на отпечаток, нажав на строки, которые вас интересуют в контексте / ответе, но я обнаружил, что с этим немного сложно справиться.
Предупреждение: если вы попытаетесь развернуть код с операторами печати под WSGI, ожидайте, что что-то сломается. Вместо этого используйте модуль регистрации.
Никогда не используйте print, так как после развертывания он будет печатать в stdout и WGSI сломается.
Используйте logging. Для целей разработки это очень просто настроить. В вашем проекте __init__.py:
import logging
from django.conf import settings
fmt = getattr(settings, 'LOG_FORMAT', None)
lvl = getattr(settings, 'LOG_LEVEL', logging.DEBUG)
logging.basicConfig(format=fmt, level=lvl)
logging.debug("Logging started on %s for %s" % (logging.root.name, logging.getLevelName(lvl)))
Теперь все, что вы записываете в журнал, идет на stderr, в данном случае в ваш терминал.
logging.debug("Oh hai!")
Плюс вы можете контролировать многословность в вашем settings.py с помощью параметра LOG_LEVEL.