提问人:fisherdog1 提问时间:9/14/2023 最后编辑:fisherdog1 更新时间:9/14/2023 访问量:47
从 cffi 函数返回一个普通的 Python 字符串?
Return a normal Python string from cffi function?
问:
cffi 的解释给出了一个示例,说明如何声明一个返回浮点数的 C 函数。您也可以声明它以返回 .我改编了这个玩具示例:char*
# my_ffi.py
...
ffibuilder.cdef("""
char * my_cfun(void);
""")
...
如果我这样做,那么我需要在调用站点使用以下 Python 将其恢复为 Python 字符串:
# user.py
from _my_ffi import ffi, lib
print(ffi.string(lib.my_cfun()))
如何声明它,以便调用 Python 代码看到一个普通的 Python 字符串,从而不需要转换?我尝试使用 PyObject * 作为返回类型,但这会导致 cdef 无法解析它:
cffi.CDefError: cannot parse "PyObject * my_cfun(void);"
这个应用程序的可谷歌性非常糟糕......我怀疑有一种完全不同的方式来回传递 python 对象,但我也肯定在 C 中看到了包含 PyObject 的函数签名。
答:
1赞
Armin Rigo
9/14/2023
#1
就像 relent95 说的,答案是编写这个 Python 函数:
def stuff():
return ffi.string(lib.my_cfunc())
0赞
fisherdog1
9/14/2023
#2
这似乎不是cffi的一个特点。我能够准确地得到我对 C 扩展的想象,例如这个答案:编译器找不到 Py_InitModule() .. 它是否已弃用,如果是这样,我应该使用什么?
这与 Lua C API 更相似,但似乎与 cffi 无关。我还发现了我还没有尝试过的 ctypes。
评论