Python&C:可以将Ctypes和Swig混合在一起吗?

问题描述:

我想找到一种方法来测试我的C代码使用Python脚本。到目前为止,我的发现是Python&C:可以将Ctypes和Swig混合在一起吗?

1)与Ctypes,我可以很容易地加载所以直接从python调用函数。另外,一切都在运行时发生,所以没有额外的编译/包装的东西。

2)但是,重新编写python中的每一种类型都很乏味且容易出错,特别是对于复杂的数据类型。每当定义发生变化时,我将不得不更新python脚本中的定义。

我在想,因为Swig可以自动导出数据类型,可以将Swig和Ctypes混合在一起吗?即使用Swig导出数据类型,可以通过Ctypes调用函数。

p.s我不确定Cython是否适合,但我们在环境中没有Cython。

+0

那么,你将不得不安装Cython。但是,如果你正在与Swig打交道,那么你肯定已经拥有了Cython的所有要求? – Arafangion 2013-02-15 04:32:03

+0

@Arafangion,困惑,Swig取决于Cython?另一件事是我们的建筑环境不同于测试环境,在测试环境我们没有swig也没有cython。 – wei 2013-02-15 20:47:25

我最终使用Swig动态链接到由C代码生成的库。通过这种方式,我只需将头文件包含在swig接口文件中来告诉swig要公开哪些函数/数据类型。这种方法的另一个优点是我可以在C中编写测试帮助函数,并且很容易公开这些函数。