Эквивалент python java OutputStream?

Есть ли эквивалент Python/псевдоэквивалент java OutputStream или PrintWriter?

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

Как я могу это сделать?

Ответ 1

"Абстрагирование того, что это такое" происходит автоматически в Python - это называется "утиная печать". Просто передайте любой объект, подобный файлу, и используйте интерфейс файловых объектов.

FWIW, стандартные потоки ввода/вывода/ошибок представлены stdin, stdout и stderr в модуле sys. Чтобы получить файлы-подобные объекты, которые читают и записывают строки, используйте модуль StringIO.

Ответ 2

Взгляните на io и StringIO.

Ответ 3

вам нужен только объект, который реализует методы, которые также реализуют файлы, трубы, потоки и т.д. например, я иногда использую этот класс, когда хочу отделить мою программу python, и я хочу перенаправить sys.stderr/sys.stdout:

class Log(object):
    """used for logging for background process"""
    def __init__(self, f):
            self.f = f
    def write(self, s):
            self.f.write(s)
            self.f.flush()
sys.stdout = sys.stderr = Log(open('/tmp/daemonlog', 'a+'))