Python调用c/c++函数

来源:互联网 发布:网络调查问卷怎么赚钱 编辑:程序博客网 时间:2024/05/17 03:59

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

  1. #include <Python.h>//包含python的头文件
  2. // 1 c/cpp中的函数
  3. int my_c_function(const char *arg)
  4. {
  5.   int n = system(arg);
  6.   return n;
  7. }
  8. // 2 python 包装
  9. static PyObject * wrap_my_c_fun(PyObject *self, PyObject *args)
  10. {
  11.   const char * command;
  12.   int n;
  13.   if (!PyArg_ParseTuple(args, "s", &command))//这句是把python的变量args转换成c的变量command
  14.     return NULL;
  15.   n = my_c_function(command);//调用c的函数
  16.   return Py_BuildValue("i", n);//把c的返回值n转换成python的对象
  17. }
  18. // 3 方法列表
  19. static PyMethodDef MyCppMethods[] = {
  20.   //MyCppFun1是python中注册的函数名,wrap_my_c_fun是函数指针
  21.   {"MyCppFun1", wrap_my_c_fun, METH_VARARGS, "Execute a shell command."},
  22.   {NULL, NULL, 0, NULL} 
  23. };
  24. // 4 模块初始化方法
  25. PyMODINIT_FUNC initMyCppModule(void)
  26. {
  27.   //初始模块,把MyCppMethods初始到MyCppModule中
  28.   PyObject *m = Py_InitModule("MyCppModule", MyCppMethods);
  29.   if (m == NULL) return;
  30. }

test.py文件如下

  1. import MyCppModule//导入python的模块(也就是c的模块,注意so文件名是MyCppModule
  2. r = MyCppModule.MyCppFun1("ls -l")//调用
  3. print r
  4. print "OK"
原创粉丝点击