Перенаправление стандартного вывода на «ничего» в python

У меня есть большой проект, состоящий из достаточно большого количества модулей, каждый из которых выводит что-то на стандартный вывод. Сейчас, когда проект разросся, крупных нет. из операторов print печатают много на std out, что значительно замедляет работу программы.

Итак, теперь я хочу решить во время выполнения , печатать ли что-либо в стандартный вывод. Я не могу вносить изменения в модули, так как их много. (Я знаю, что могу перенаправить stdout в файл, но даже это значительно медленнее.)

Итак, мой вопрос в том, как мне перенаправить stdout в ничто, т.е. как сделать так, чтобы оператор print ничего не делал ?

# I want to do something like this.
sys.stdout = None         # this obviously will give an error as Nonetype object does not have any write method.

В настоящее время единственная идея, которая у меня есть, - это создать класс, который имеет метод записи (который ничего не делает) и перенаправить стандартный вывод на экземпляр этого класса.

class DontPrint(object):
    def write(*args): pass

dp = DontPrint()
sys.stdout = dp

Есть ли встроенный механизм в Python для этого? Или есть что-то лучше этого?

116
задан Pushpak Dagade 17 December 2012 в 09:09
поделиться

1 ответ

Дополнение к ответ iFreilicht - это работает на оба python 2 & 3.

import sys

class NonWritable:
    def write(self, *args, **kwargs):
        pass

class StdoutIgnore:
    def __enter__(self):
        self.stdout_saved = sys.stdout
        sys.stdout = NonWritable()
        return self

    def __exit__(self, *args):
        sys.stdout = self.stdout_saved

with StdoutIgnore():
    print("This won't print!")
0
ответ дан 24 November 2019 в 02:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: