Эквивалент 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+'))