Python 从Cython公开类似文件的对象

Python 从Cython公开类似文件的对象,python,file-io,cython,Python,File Io,Cython,我需要公开一个C库中类似文件的对象,我正在用Cython模块包装它。我想在缓冲、readline()等方面重用python的通用io代码 新的IO模块似乎正是我所需要的,但实际上从Cython使用它似乎并不简单,我尝试了几种方法: 我在从IO.RawIOBase继承的cdef类中的代码-这失败了,因为cdef类只能从其他cython cdef类继承,而IO是“原始”C cdef类中的我的代码,另一个继承我的cdef类和RawIOBase的(非cdef)类-失败,出现“TypeError:多个基

我需要公开一个C库中类似文件的对象,我正在用Cython模块包装它。我想在缓冲、readline()等方面重用python的通用io代码

新的IO模块似乎正是我所需要的,但实际上从Cython使用它似乎并不简单,我尝试了几种方法:

  • 我在从IO.RawIOBase继承的cdef类中的代码-这失败了,因为cdef类只能从其他cython cdef类继承,而IO是“原始”C

  • cdef类中的我的代码,另一个继承我的cdef类和RawIOBase的(非cdef)类-失败,出现“TypeError:多个基有实例布局冲突”

  • 我的代码在一个继承自RawIOBase的(非cdef)类中——这是可行的,但我失去了在类中存储我的c级(我需要与底层库进行对话)内容的能力,因此我需要在它周围创建一个cdef包装器,并将其作为成员存储。。。这看起来一团糟

  • 我在cdef类中的代码没有继承(原始)IOBase,而是重新实现了它的功能,Python代码将我的对象包装在BufferedReader/BufferedWriter中—这一个似乎可以工作,并且比前面的选项更简单

我的问题:

1) 我是不是错过了什么,重新发明了方向盘

2) 为了让BufferedReader/Writer对当前和未来版本的python中的对象满意,我需要实现IOBase中的哪些内容?这有文件记录吗


3) 在Python2.6中,IO是纯python的,这将如何工作?我想性能会受到影响,但它会起作用,对吗?

对底层库返回的文件描述符编号调用
os.fdopen()
,然后向生成的文件对象发送普通Python方法调用以进行输入和输出,会不会太低效?对于大多数I/O,如果您能看到直接调用C例程还是让Python方法dispatch logic为您调用它的区别,我会感到惊讶——但是,当然,您可能处于一种不寻常的情况,我可能错了

对不起,我之前没有看到这个答案。这并不适用于我的情况,因为我从第三方库得到的不是操作系统级的FD。