我是靠谱客的博主 傻傻向日葵,这篇文章主要介绍C++调用Python的一些大坑,现在分享给大家,希望可以做个参考。

具体方法网上好多,在此不赘述,只记录踩过的坑

1,C++调用纯Python脚本的坑

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('这里写.py文件所在文件夹的绝对路径')"); //注意是所在文件夹!!! //变量声明,所有跟Python程序交互的变量都是PyObject* PyObject* pModule = NULL; PyObject* pDict = NULL; PyObject* pFunc = NULL; PyObject* pResult = NULL; //加载.py文件 pModule = PyImport_ImportModule("这里写要用的Python脚本文件名,不带.py"); //加载函数 pFunc = PyObject_GetAttrString(pModule, "这里写要加载的函数名,不带括号和参数列表"); //调用函数 PyObject* args = Py_BuildValue("ii", a, b);//把参数转换为Python能看懂的格式 //详细说明参照文章1 pResult = PyEval_CallObject(pFunc, 这里写参数列表,无参数函数写NULL); //pResult是函数返回值,没有可以直接PyEval_CallObject(pFunc, args); //返回值转换为C++能看懂的格式 int res = 0; PyArg_Parse(pResult, "i", &res);//res就是最终返回值

参考文章:https://blog.csdn.net/qq_38275373/article/details/91367372?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162823701616780271577730%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162823701616780271577730&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-91367372.pc_search_result_control_group&utm_term=c%2B%2B%E8%B0%83%E7%94%A8python&spm=1018.2226.3001.4187

2,C++调用import tensorflow的Python脚本

1里面的情况只适用于不带tensorflow的脚本,因为tensorflow涉及到对GPU的调用(根据报错推断的不一定对)

按照1的方法调用tensorflow的话PyImport_ImportModule()返回NULL,解决方法如下图

复制代码
1
2
3
4
int argc = 1; wchar_t* argv[] = { L" " }; PySys_SetArgv(argc, argv); //pModule = PyImport_ImportModule("callFunction");

第二行可能会报

复制代码
1
C2440 “初始化”: 无法从“const wchar_t [2]”转换为“wchar_t *”

解决方法:解决方案资源管理器->C/C++->语言->符合模式,改成否

重新运行显示调用成功

大坑应该不止这俩,边学边发

最后

以上就是傻傻向日葵最近收集整理的关于C++调用Python的一些大坑的全部内容,更多相关C++调用Python内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(74)

评论列表共有 0 条评论

立即
投稿
返回
顶部