ctypes shared object FILE*

Aaron Brady castironpi at gmail.com
Sun Nov 9 00:06:44 EST 2008


On Nov 8, 6:34 pm, "Dog Walker" <thud... at gmail.com> wrote:
> I need to call a function in a shared object with this signature:
> init_dialog(FILE *input, FILE *output)
> The FILE*'s are to stdin and stdout.
>
> The call from python is libdialog.init_dialog( x, y)
> I need to define x and y so that they will have the structure of
> sys.stdin and sys.stdout; the called function (init_dialog) is using a
> (std?) function fileno to extract the fileno from the FILE* describing
> stdin and stdout.
> How can I do this?
>
> --
> I have seen the future and I'm not in it!

sys.stdin and sys.stdout have a 'fileno' method, which returns an
integer.

FILE* PyFile_AsFile(PyObject *p)
Return the file object associated with p as a FILE*.

This might be what you want.  You need to inform the function of what
types to expect and return.

>>> import sys
>>> import ctypes
>>> ctypes.pythonapi.PyFile_AsFile.argtypes= [ ctypes.py_object ]
>>> ctypes.pythonapi.PyFile_AsFile.restype= ctypes.c_void_p
>>> ctypes.pythonapi.PyFile_AsFile( sys.stdin )
2019259304
>>> ctypes.pythonapi.PyFile_AsFile( sys.stdout )
2019259336

But I'm confused why PyFile_AsFile didn't return a c_void_p as I
asked.



More information about the Python-list mailing list