将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中的变量默认是什么类型
Sep 11 Python
Python实现简易过滤删除数字的方法小结
Jan 09 Python
django admin后台添加导出excel功能示例代码
May 15 Python
Python 窗体(tkinter)按钮 位置实例
Jun 13 Python
python 字符串追加实例
Jul 20 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
python 求10个数的平均数实例
Dec 16 Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
Pycharm同步远程服务器调试的方法步骤
Nov 04 Python
python实现图片转字符画
Feb 19 Python
python字典的元素访问实例详解
Jul 21 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实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
php实现文件上传基本验证
2020/03/04 PHP
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
vue路由跳转传参数的方法
2019/05/06 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
Python 正则表达式(转义问题)
2014/12/15 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
pyqt5自定义信号实例解析
2018/01/31 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
pytorch实现线性拟合方式
2020/01/15 Python
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
汽车驾驶求职信
2013/10/25 职场文书
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
财务会计大学生自我评价
2014/04/09 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书