Перенаправляем модуль логгинга Python в TextCtrl — wxPython #39

Во время посмотра группы wxPython в Google или StackOverflow, я получил много интересных идей. В один прекрасный день, я увидел тему, в которой кто-то спрашивал о том, как заставить модуль логгинга Python вывести данные в файл и в TextCtrl.

Похоже, что вам нужно будет создать обычный хэндлер логгинга, чтобы сделать это. Сначала, я пытался использовать нормальный StreamHandler и перенаправлять stdout через модуль sys (sys.stdout) в мой текстовый контроль, но он перенаправлял только напечатанные утверждения, а не сообщения лога.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Давайте посмотрим на то, к чему я пришёл

Вы заметите, что я остановился на использовании модуля logging.config. Метод dictConfig был добавлен в Python 2.7. Проще говоря, вы настраиваете ваш хэндлер логгинга и форматтеры и всё, что не находится в словаре, а затем пропускаете это через logging.config.

Если вы запустите этот код, то заметите, что первые несколько сообщений отправятся в stdout и в лог, но не в текстовый контроль. В конце панельного класса __init__ мы добавляем обычный хэндлер, и вот здесь как раз начинается перенаправление сообщений логгинга в текстовый контроль. Вы можете нажать на кнопку, чтобы увидеть всё это в действии!

Вот как это выглядело на моём компьютере:

Перенаправляем модуль логгинга Python в TextCtrl - wxPython #39

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

Итоги

Теперь вы знаете как перенаправлять методы логгинга Python в виджет wxPython, а именно в wx.TextCtrl. Это может прийтись очень кстати, если вы захотите сохранить выходные данные из приложения в отдельный файл, а не только просматривать их в режиме реального времени. В следующей статье, мы рассмотрим то, как перенаправить stdout в wx.TextCtrl!