У меня есть класс, который использует протокол управления контекстами, чтобы некоторое время иметь поток без вывода сообщений stderr (в основном используется для развертываний py2exe, когда приложение, записывающее что-либо в stderr, вызывает уродливые диалоги, когда приложение закрывается, и я ' я делаю что-то, что я знаю, будет иметь какой-то вывод stderr)
import sys
import os
from contextlib import contextmanager
@contextmanager
def noStderr():
stderr = sys.stderr
sys.stderr = open(os.devnull, "w")
yield
sys.stderr = stderr
Мой вопрос заключается в том, что было бы более питонным, разумно чистым решением открытия системного бита и записи в него или пропуска выделения операций fd и write и создания нового класса ala:
class nullWriter(object):
def write(self, string):
pass
, а затем заменить указанный выше код на
from contextlib import contextmanager
@contextmanager
def noStderr():
stderr = sys.stderr
sys.stderr = nullWriter()
yield
sys.stderr = stderr