栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c/c++调用python的过程总结

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c/c++调用python的过程总结

1、第一件事就是引入头文件

#include 

2、接下来有些函数需要用

//初始化python解释器,这个必须最先调用
Py_Initialize()

//下面这个函数能执行一行python代码,比如 import sys ,用法如下
//PyRun_SimpleString("import sys")
//PyRun_SimpleString("print('hello')")
PyRun_SimpleString()


//这个函数是加载python模块的,用法如下,xxx是脚本的名字,但不能包含“.py”三个字符
//加载后会返回PyObject类型指针,后面的函数会用到。
//这个函数会有些坑,后面会简单总结一下
//PyImport_ImportModule("xxx")
PyImport_ImportModule()

//这个函数是从模块里取函数或者类。用法:
//PyObject_GetAttrString(“PyImport_ImportModule函数返回的指针”,“函数或者类的名字”)
//执行后返回PyObject类型指针,后面函数会用。
PyObject_GetAttrString()

//调用PyObject_GetAttrString函数中取出的函数或者类。
//PyObject_CallObject("PyObject_GetAttrString函数返回的指针",“被调函数入参,无参函数设置NULL”)
//调用的函数有入参,还需要配合入参处理函数将c/c++数据翻译为python数据
PyObject_CallObject()

//解析python函数返回值的,没有就不用。
PyArg_Parse()

//析构python解释器的,最后一定要调用,不然内存泄漏
Py_Finalize()


//这个函数能打印调用过程中产生的异常
PyErr_Print()

3、关于PyImport_ImportModule()函数,加载模块前调用PyRun_SimpleString函数,如下

PyRun_SimpleString("sys.path.append('脚本所在的父目录')")

不然PyImport_ImportModule找不到模块会返回NULL。很多时候会因为脚本路径问题找不到,导致折腾半天。再有就是脚本携带隐藏的错误,可能会因为启动方式,或者调用方式,或者系统不同导致的,但PyImport_ImportModule依旧会返回NULL。这时候就需要在PyImport_ImportModule函数后面调用PyErr_Print()函数看看有没有异常。我被后者折腾一天!!!!!!! ,偶然发现这个打印异常的函数。非常有用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/974996.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号