将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 相关文章推荐
Python中asyncore的用法实例
Sep 29 Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 Python
Python实现购物车购物小程序
Apr 18 Python
python清除字符串中间空格的实例讲解
May 11 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 Python
Python设计模式之建造者模式实例详解
Jan 17 Python
详解python3 + Scrapy爬虫学习之创建项目
Apr 12 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
Python 函数绘图及函数图像微分与积分
Nov 20 Python
python实现修改固定模式的字符串内容操作示例
Dec 30 Python
python实现信号时域统计特征提取代码
Feb 26 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下使用SMTP发邮件的代码
2008/01/10 PHP
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
php网站被挂木马后的修复方法总结
2014/11/06 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
Javascript window对象详解
2014/11/12 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
Vue实现多页签组件
2021/01/14 Vue.js
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
2015/04/28 Python
python+mongodb数据抓取详细介绍
2017/10/25 Python
python读取文本中的坐标方法
2018/10/14 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
tensorflow多维张量计算实例
2020/02/11 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
python3 kubernetes api的使用示例
2021/01/12 Python
苹果美国官方商城:Apple美国
2016/08/24 全球购物
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
高级Java程序员面试要点
2013/08/02 面试题
如何现实servlet的单线程模式
2014/08/05 面试题
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
监守自盗观后感
2015/06/10 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript
一篇文章弄懂Python中的内建函数
2021/08/07 Python
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js