Глобально замолчать стандартный вывод для одного целого модуля - PullRequest
1 голос
/ 19 июня 2019

У меня есть скрипт, работающий с несколькими модулями, в том числе с регистраторами (предположим, модули A и B).

При выполнении функции A автоматически создадут регистратор, но, чтобы сохранить порядок, я хотел бы, чтобы сообщения из модуля B отображались только в моем stdout.

Есть ли удобный способ отключить все операторы печати для каждой функции / класса, поступающие из модуля A, без явной ссылки на функцию, которая печатает? Я думаю о чем-то вроде строки кода в начале скрипта, обрабатывающей это.

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Существует два подхода:

  1. Вы можете обезопасить исправление объекта функции печати / регистратора в пространстве имен модуля A и заменить его своим собственным.Это быстро и грязно, но не потребует каких-либо изменений в модуле А. Я настоятельно рекомендую не делать этого, если это возможно, у вас просто возникнут проблемы.

  2. Если вы можете изменить модуль A, то правильный способ сделать это - убедиться, что модуль A использует python logger для всех своих выходных данных и что он задает имя logger.В вашей конфигурации ведения журнала вы можете указать LoggerFilter или LoggerAdapter для выборочного подавления записей журнала на основе префикса имени регистратора или других атрибутов LogEntry.

0 голосов
/ 19 июня 2019

Этот ответ отвечает только на часть вашего вопроса «отключить все операторы печати».

Вы можете попробовать вставить следующее где-то в начале модуля:

print = lambda *a, **kw: None

Таким образомпри дальнейшем использовании в модуле будет использоваться глобальный print модуля вместо встроенного print.

. Если вам нужна помощь по перенаправлению выходных данных журнала, предоставьте код, который устанавливает регистратор, который выиспользовать в модуле.

...