Мне нужно выставить файл-подобный объект из библиотеки C, который я обертываю с помощью модуля Cython. Я хочу повторно использовать общий код io для python для таких вещей, как буферизация, readline() и т. Д.Публикация файлоподобного объекта из Cython
Новый модуль ввода-вывода, кажется, именно то, что мне нужно, но на самом деле его использование от Cython кажется нетривиальным, ве пытались несколько aproaches:
Мой код в классе CDEF, который наследуется от IO.RawIOBase - это терпит неудачу, потому что классы CDEF могут наследовать только от других классов Cython CDEF, в то время как IO является «сырой» С.
Мой код в классе cdef, еще один (не-cdef) класс, который наследует как мой класс cdef, так и RawIOBase - Fails with "TypeError: несколько баз имеют конфликт с планировкой экземпляра "
Мой код в классе (non-cdef), который наследуется от RawIOBase. Это работает, но я теряю возможность сохранять свой уровень c (мне нужно поговорить с базовой библиотекой) внутри класса, поэтому мне нужно сделать обертку cdef вокруг него и сохранить это как член ... это похоже на беспорядок.
Мой код в классе cdef, который не наследует (Raw). IOBase скорее переопределяет его функциональность, код Python получает мой объект, завернутый в BufferedReader/BufferedWriter. Этот, похоже, работает и менее беспорядочен, чем предыдущий.
Мои вопросы (ы):
1) Могу ли я что-то отсутствует и изобретать колесо здесь?
2) Что такое точный материал из IOBase, который мне нужно реализовать, чтобы поддерживать BufferedReader/Writer с моим объектом в текущих и будущих версиях python? Является ли это документированным где угодно?
3) Как это будет работать в python 2.6, где IO - чистый питон? Я думаю, что производительность будет страдать, но она будет работать, не так ли?
Извините, я не видел этого ответа раньше. Это не совсем применимо к моему делу, поскольку то, что я получаю от сторонней библиотеки, не является FD уровня os. – bdew 2011-12-15 15:49:24