Python ctypes:Python文件对象< - > C FILE*

use*_*005 9 python ctypes

我正在使用ctypes用Python包装一个C库(我已经控制过).我想用声明包装一个C函数:

int fread_int( FILE * stream );
Run Code Online (Sandbox Code Playgroud)

现在; 我想在python中打开文件,然后使用Python文件对象(以某种方式??)来访问底层的FILE*对象并将其传递给C函数:

# Python
fileH = open( file , "r")
value = ctypes_function_fread_int( ????? )
fileH.close()
Run Code Online (Sandbox Code Playgroud)

Python文件< - > FILE*映射是否​​可能?

乔金 -

Ale*_*lli 27

Python文件对象不一定具有底层C级FILE *- 至少,除非您愿意将代码绑定到极其特定的Python版本和平台.

我会建议,而不是使用是Python文件对象的fileno得到一个文件描述符,然后用ctypes调用C运行时库的fdopen制作FILE *出来的那个.这是一种非常便携的方法(你也可以采用其他方式).最大的问题是,对于在同一文件描述符(Python文件对象和C FILE *)上打开的两个对象,缓冲将是分开的,因此请务必根据需要经常刷新所述对象(或者,如果没有缓冲,则打开这两个对象,如果这更方便,与您的预期用途兼容).


yk4*_*ver -1

我遇到了同样的问题。

看看这个文件:

http://svn.python.org/projects/ctypes/trunk/ctypeslib/ctypeslib/contrib/pythonhdr.py

您可以从中使用 PyFile_AsFile 。

  • 不幸的是 PyFile_AsFile 在 Python 3 C API 中不存在。 (5认同)
  • @MikhailKorobov:我问了[一个问题](http://stackoverflow.com/q/16130268/309483)来解决这个问题。 (2认同)