FILE object in Python3.0 extension modules

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Fri May 29 21:41:03 EDT 2009


En Fri, 29 May 2009 06:52:15 -0300, Joachim Dahl <dahl.joachim at gmail.com>  
escribió:

> In Python2.x, I used PyFile_Check(obj) to check if a parameter was a
> file object.
>
> Now, in Python3.0 the same object (obtained as open('file.bin','wb'))
> is an
> io.BufferedWriter object.
>
> How do I perform type checking for such an object in the extension
> module,

I don't know which is the preferred way to check for a file object in 3.x  
- I hope someone can answer this more precisely. In principle, a file  
inherits from io.IOBase, but this class is defined in io.py and probably  
isn't intended to be used in C code. Other alternatives are _io._IOBase,  
PyIOBase_Type, and io.FileIO/_io.FileIO

> and how do I extract a FILE * object from it?  I browsed the C API
> documentation,  but
> couldn't find an answer.

I'd use PyObject_AsFileDescriptor
http://docs.python.org/dev/py3k/c-api/file.html

(Notice that the documentation is outdated; the PyFileObject type does not  
exist anymore, and a file isn't a wrapper around a FILE struct either)

> The purpose is to dump the contents of a Python extension type to disk
> as
> binary data using C's fwrite() function.

 From the above, I'd use write() with the file descriptor obtained from  
PyObject_AsFileDescriptor.

-- 
Gabriel Genellina




More information about the Python-list mailing list