cc++调用python的过程总结

cc++调用python的过程总结,第1张

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()函数看看有没有异常。我被后者折腾一天!!!!!!! ,偶然发现这个打印异常的函数。非常有用

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1498753.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

发表评论

登录后才能评论

评论列表(0条)

保存