эквивалент Python для Java OutputStream? - PullRequest
4 голосов
/ 22 декабря 2010

Существует ли Python-эквивалент / псевдо-эквивалент java OutputStream или PrintWriter ?

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

Как можноЯ делаю это?

Ответы [ 3 ]

7 голосов
/ 22 декабря 2010

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

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

3 голосов
/ 22 декабря 2010

Посмотрите на модули io и StringIO .

1 голос
/ 22 декабря 2010

вам просто нужен объект, который реализует методы, которые также реализуют файлы, каналы, потоки и т. Д.например, я использую этот класс иногда, когда хочу отключить свою программу на 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+'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...