Протокол Python разделен между stdout и stderr

Возможно ли иметь сообщения о протоколе python, которые являются INFO или DEBUG, для перехода на стандартный вывод и ПРЕДУПРЕЖДЕНИЕ или больше, чтобы перейти в stderr?

  • Многопроцессорность Python: как я могу НАДЕЖДАТЬ перенаправление stdout из дочернего процесса?
  • Как реплицировать поведение tee в Python при использовании подпроцесса?
  • В python я могу перенаправить вывод функции print в stderr?
  • Обтекание подпроцессом 'stdout / stderr
  • ошибки синтаксиса журнала и неперехваченные исключения для подпроцесса python и распечатать их на терминале
  • Как печатать на stderr в Python?
  • Python: subprocess.call, stdout в файл, stderr в файл, отображение stderr на экране в режиме реального времени
  • Python считывает из подпроцесса stdout и stderr отдельно при сохранении порядка
  • 2 Solutions collect form web for “Протокол Python разделен между stdout и stderr”

    Кажется, я делаю то, что хочу:

    #!/usr/bin/python import sys import logging class InfoFilter(logging.Filter): def filter(self, rec): return rec.levelno in (logging.DEBUG, logging.INFO) logger = logging.getLogger('__name__') logger.setLevel(logging.DEBUG) h1 = logging.StreamHandler(sys.stdout) h1.setLevel(logging.DEBUG) h1.addFilter(InfoFilter()) h2 = logging.StreamHandler() h2.setLevel(logging.WARNING) logger.addHandler(h1) logger.addHandler(h2) 

    Я думал, что это поможет: Handler.setLevel(lvl)

    Устанавливает пороговое значение для этого обработчика в lvl. Ведение журнала сообщений, которые являются менее серьезными, чем lvl, будут игнорироваться. Когда обработчик создается, уровень устанавливается на NOTSET (который вызывает обработку всех сообщений).

    Но теперь я вижу, что он не будет делать то, что вы хотите (разделите INFO / DEBUG с WARNING / ERROR)

    При этом вы можете написать собственный обработчик (например, класс, расширяющий logging.StreamHandler ) и перезаписать метод Handler.handle() .

    Python - лучший язык программирования в мире.