Python中调用C++函数

来源:互联网 发布:linux开机启动zookeep 编辑:程序博客网 时间:2024/05/21 11:07

Python开发效率高,运行效率低。而c/c++恰恰相反。因此在python脚本中调用c/c++的库,对python进行扩展,是很有必要的。使用python api,http://www.python.org/doc/ ,需要安装python-dev。
test.cpp文件如下

 

#include <python2.7/Python.h> //包含python的头文件   #include <string>#include <iostream>using namespace std;// 1 c/cpp中的函数       int my_c_function(const char* cmd,const char* opt) {     string arg = string(cmd) + string(opt);  cout << "arg:"<<arg<<endl;  int n = system(arg.c_str());    return n;  }  // 2 python 包装     static PyObject * wrap_my_c_fun(PyObject *self, PyObject *args) {     const char *cmd,*opt;  int n;    if (!PyArg_ParseTuple(args, "ss", &cmd,&opt))//这句是把python的变量args转换成c的变量command   d       return NULL;    n = my_c_function(cmd,opt);//调用c的函数        return Py_BuildValue("i", n);//把c的返回值n转换成python的对象      }  // 3 方法列表       static PyMethodDef MyCppMethods[] = {       //MyCppFun1是python中注册的函数名,wrap_my_c_fun是函数指针          { "MyCppFun1", wrap_my_c_fun, METH_VARARGS, "Execute a shell command." },      { NULL, NULL, 0, NULL }   };  // 4 模块初始化方法      PyMODINIT_FUNC initMyCppModule(void) {     //初始模块,把MyCppMethods初始到MyCppModule中        PyObject *m = Py_InitModule("MyCppModule", MyCppMethods);    if (m == NULL)      return;  }


make:

g++ -shared -fpic test.cpp -o MyCppModule.so

 

test.py文件如下

import MyCppModuler = MyCppModule.MyCppFun1("ls ","-l")print r


http://blog.csdn.net/marising/article/details/2845339

http://www.th7.cn/Program/Python/2011-07-07/29384.shtml

 

原创粉丝点击