今天在工作中遇到一个问题;
我需要在Python脚本中调用一个Cpp语言函数,这个Cpp语言函数属于外部模块的函数。
具体环境:
OS: Linux Fedora 26
python: python2.7
接下来我要开始调查这个问题,调查清楚之后,我将会更新到这里来:
[2018-03-01 update]
C语言函数接收的输入是一个结构体,这样的话,就需要Python将数据以Dictionary的形式传进来。
这样的话,昨天调查的函数PyArg_P
arseTuple已经不能满足需要了。这时可以将接收输入的函数变更为
PyArg_ParseTupleAndKeywords()。
同时,还有一个问题,在编译时有如下一个编译错误:fatal error: Python.h: No such file or directory
该问题的解决方法:安装python-dev package或者python34-dev package。
[2018-02-28 update]
在python中调用C语言的API,需要有如下三部分内容;
1. 导出函数:
所谓导出函数,就是适配函数,在此函数中有如下几件事情需要完成
- 将python输入转换成C语言输入:PyArg_ParseTuple
- 给被适配函数配参,并调用
- 将被调用函数的输出,转换成python对象输出:Py_BuildValue
2. 方法列表
列出所有可以被python解释器使用的函数列表,包括四项内容:
- 方法名:python解释器调用时的名字
- 导出函数:上面第一部分实现的函数
- 参数传递方式:METH_VARARGS:元组;METH_KEYWORDS:字典
- 方法描述:属于对该函数的说明内容。
3.初始化函数
每个python扩展模块,都要有初始化函数,以便python解释器能够对其正确的初始化