У меня есть большой проект, состоящий из достаточно большого количества модулей, каждый из которых выводит что-то на стандартный вывод. Сейчас, когда проект разросся, крупных нет. из операторов 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 для этого? Или есть что-то лучше этого?
Дополнение к ответ 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!")