找到最简单的方法来包装双层包装->;Python的双C函数
我需要包装一个C函数的接口找到最简单的方法来包装双层包装->;Python的双C函数,python,c,wrapper,Python,C,Wrapper,我需要包装一个C函数的接口 double foo(double) 到python,以便在python控制台中 >>foo_py(2.9) 应该给我foo(2.9)的两倍值。最后,我在scipy中使用导出的foo_py 我一直在寻找包装这样一个C函数的最简单的方法。当然有很多关于stackoverflow的相关帖子,但是它们都是几年前写的,现在我正在寻找一个更新的答案来满足我的具体需求。谢谢 [编辑]作为参考,我使用PyObj等尝试了C扩展。关于这方面的文档似乎缺乏。我还尝试了用P
double foo(double)
到python,以便在python控制台中
>>foo_py(2.9)
应该给我foo(2.9)的两倍值。最后,我在scipy中使用导出的foo_py
我一直在寻找包装这样一个C函数的最简单的方法。当然有很多关于stackoverflow的相关帖子,但是它们都是几年前写的,现在我正在寻找一个更新的答案来满足我的具体需求。谢谢
[编辑]作为参考,我使用PyObj等尝试了C扩展。关于这方面的文档似乎缺乏。我还尝试了用Posith.python将C++函数封装到Python。这里我需要包装C函数(以避免命名需求问题等)。下面是一个简单的示例: test.c
#include <Python.h>
static PyObject* foo(PyObject* self, PyObject* args) {
double d;
PyArg_ParseTuple(args, "d", &d);
return Py_BuildValue("d", d);
}
// Bind python function to C function
static PyMethodDef simplemodule_methods[] = {
{"foo_py", foo, METH_VARARGS},
{NULL, NULL, 0}
};
// Initialize module
void inittest() {
(void) Py_InitModule("test", simplemodule_methods);
}
编译
gcc-shared-fPIC-I/usr/include/python2.7-o test.so test.c
跑
python test.py
这是我的视频,它展示了好运,使用ctypes应该非常简单:@figs谢谢。你给我的链接看起来很好。让我在等待其他人的回应时查看一下。包装函数始终返回0。我的代码和他的类似:import-ctypes from-ctypes import-cdll-lib=cdll.LoadLibrary(“./libfoo.so”)lib.foo\u r.argtypes=(ctypes.c\u-double,)lib.foo\u-r.restypes=ctypes.c\u-double-print-lib.foo\u-r(9)奇怪的是,你必须发布所有Python和c代码让我们检查它。@fig谢谢你的帮助。我的C代码很大。python代码作为上述注释发布。我以后可能会打开一个新帖子,但现在我使用Everlisle的解决方案。它起作用了。谢谢
from test import *
print foo_py(2.9) # will output 2.9