将Python代码嵌入C++程序进行编写的实例


Posted in Python onJuly 31, 2015

把python嵌入的C++里面需要做一些步骤

    安装python程序,这样才能使用python的头文件和库
    在我们写的源文件中增加“Python.h”头文件,并且链入“python**.lib”库(还没搞清楚这个库时静态库还是导出库,需要搞清楚)
    掌握和了解一些python的C语言api,以便在我们的c++程序中使用

常用的一些C API函数

在了解下面的函数之前有必要了解一下**PyObject***指针,python里面几乎所有的对象都是使用这个指针来指示的。
Py_Initialize()&&Py_Finalize()

    在调用任何python的c函数之前需要调用的函数,“Py_Initialize”是用来初始化python模块的,推测是加载初始化加载dll的。对应的在使用python模块之后用“Py_Finalize”来释放模块。

PyImport_ImportModule()

    用来载入一个python模块,这个模块就是一般的python文件。这里需要注意的是,在加载这个模块的时候会执行模块里面所有可以执行的语句。包括import导入语句和在函数体之外的所有语句

PyObject_GetAttrString()

    返回模块里面的函数

Py_BuildValue()

    建立一个参数元组,一般都是用这个函数来建立元组,然后将这个元组作为参数传递给python里面的函数。

PyEval_CallObject()

    调用函数,并把“Py_BuildValue”建立的元组作为参数传递给被调用的函数

源码实例

下面的实例是在c++代码中调用Python的函数,传递参数并且获取返回值

test.cpp代码

#include <iostream>
#include <Python.h>
using namespace std;

int main(int argc, char* argv[])
{
  Py_Initialize();  //初始化

  PyObject* pModule = NULL;
  PyObject* pFunc = NULL;
  PyObject* pParam = NULL;
  PyObject* pResult = NULL;
  const char* pBuffer = NULL;
  int iBufferSize = 0;

  pModule = PyImport_ImportModule(“test_python");

  if (!pModule)
  {
    cout << "get module failed!" << endl;
    exit (0);
  }

  pFunc = PyObject_GetAttrString(pModule, "main");
  if (!pFunc)
  {
    cout << "get func failed!" << endl;
    cout << int(pFunc) << endl;
    exit (0);
  }
  pParam = Py_BuildValue("(s)", "HEHEHE");
  pResult = PyEval_CallObject(pFunc,pParam);
  if(pResult)
  {
    if(PyArg_Parse(pResult, "(si)", &pBuffer, iBufferSize))
    {
      cout << pBuffer << endl;
      cout << iBufferSize << endl;
    }
  }
  Py_DECREF(pParam);
  Py_DECREF(pFunc);

  Py_Finalize();
  //cout << "hello" << endl;
  return 0;
}

test_python.py代码

def main(szString):
  return ("hello", 5)
Python 相关文章推荐
Swift 3.0在集合类数据结构上的一些新变化总结
Jul 11 Python
Python外星人入侵游戏编程完整版
Mar 30 Python
老生常谈Python进阶之装饰器
May 11 Python
把csv文件转化为数组及数组的切片方法
Jul 04 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
python读文件的步骤
Oct 08 Python
python类中super() 的使用解析
Dec 19 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
pycharm双击无响应(打不开问题解决办法)
Jan 10 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
使用python实现时间序列白噪声检验方式
Jun 03 Python
利用For循环遍历Python字典的三种方法实例
Mar 25 Python
Python制作数据导入导出工具
Jul 31 #Python
简单理解Python中的装饰器
Jul 31 #Python
python简单分割文件的方法
Jul 30 #Python
Python读取网页内容的方法
Jul 30 #Python
python查看FTP是否能连接成功的方法
Jul 30 #Python
python如何实现excel数据添加到mongodb
Jul 30 #Python
python学习之第三方包安装方法(两种方法)
Jul 30 #Python
You might like
使用PHP生成PDF方法详解
2015/01/23 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
2016/01/05 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
PHP 实现重载
2021/03/09 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
JavaScript中关于class的调用方法
2017/11/28 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
python删除过期文件的方法
2015/05/29 Python
详解Python验证码识别
2016/01/25 Python
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
2017/11/06 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
flask项目集成swagger的方法
2020/12/09 Python
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
集团公司总经理岗位职责
2013/12/20 职场文书
读书之星事迹材料
2014/05/12 职场文书
提拔干部考察材料
2014/05/26 职场文书
运动员口号
2014/06/09 职场文书
诚实守信道德模范事迹材料
2014/08/15 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
践行三严三实心得体会
2014/10/13 职场文书
计划生育汇报材料
2014/12/26 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书
mysql 子查询的使用
2022/04/28 MySQL