Как использовать объект потока Python? - PullRequest
1 голос
/ 31 мая 2011

У меня есть функция, которая берет открытый файловый объект file и записывает в него данные следующим образом:

def Write(self, file):
    file.write("Data")

Теперь я хотел бы протестировать эту функцию, и я подумал, что было бы неплохо сделатьэто с каким-то потоком, который не записывает данные в файл.Я не смог найти класс Python2.7, который выполняет эту работу, кроме класса StringIO .Тем не менее, в Python2.7 этот класс ожидает Unicode-строку в функции записи.(file.write(u"Data")) Таким образом, я не могу проверить свою функцию Write с классом StringIO.
В своем обходном пути я создал небольшой фиктивный класс

class MyStream(object):
    S = property(lambda self: self._S)

    def __init__(self):
        self._S = ""

    def write(self, s):
        self._S += s

, с помощью которого я теперь могу успешно проверить свой Write function.

Мой вопрос:
Есть ли нативный класс python, который делает то же самое?
Заранее спасибо за любые предложения
С уважением, Woltan

1 Ответ

1 голос
/ 31 мая 2011

Поскольку документация io гласит:

Поскольку этот модуль был разработан в основном для Python 3.x, вы должны знать, что все использования «байтов» в этом документе относятся кк типу str (из которых байты являются псевдонимами), и все случаи использования «текста» относятся к типу Юникод.Более того, эти два типа не являются взаимозаменяемыми в API io.

Т.е. если вы используете библиотеку ввода-вывода Python 3 с резервной копией, вы должны использовать Unicode.Однако оригинальный класс StringIO - который учитывает текст байтов (строки Python 2) и принимает их - все еще существует в Python 2.7, его просто нет в бэкпорте io.Вместо этого он имеет свой собственный модуль, также называемый StringIO.

...