C++ 调用Python脚本
2023-09-14 08:59:35 时间
本人环境:
Windows10;
python3.7.4;
visual studio 2019;
安装python,opencv(如果用到的话),以及将二者目录添加到vs中的包含目录和库目录就不再说了。教程一大堆,自己配置好。以下步骤都建立在这些环境配置成功之后。
重要:
将Python安装目录下的include
和libs
文件夹引入到项目中
将libs
目录下的python37.lib
复制一份为python37_d.lib
一、Python
脚本
这个python脚本和C++编译成功后生成的.exe文件放在同一目录下。
def Hello(): print("Hello") def Add(a,b): return a+b
二、C++调用python脚本
#include <Python.h> using namespace std; int main() { Py_Initialize(); //初始化,创建一个Python虚拟环境 if (Py_IsInitialized()) { PyObject* pModule = NULL; PyObject* pFunc = NULL; pModule = PyImport_ImportModule("test_python"); //参数为Python脚本的文件名 if (pModule) { pFunc = PyObject_GetAttrString(pModule, "Hello"); //获取函数 PyEval_CallObject(pFunc, NULL); //执行函数 } else { printf("导入Python模块失败...\n"); } } else { printf("Python环境初始化失败...\n"); } Py_Finalize(); }
需要将Python
安装目录下的Lib
和Dlls
放到程序运行目录下,并添加Python37.dll
到运行目录即可(我是这么做的)。
运行结果:
ok,成功调用python脚本。
附上C++调用python的一些规范化语句:
#include<Python.h> //添加python的声明 using namespace std; int main() { Py_Initialize(); //1、初始化python接口 //初始化使用的变量 PyObject* pModule = NULL; PyObject* pFunc = NULL; PyObject* pName = NULL; //2、初始化python系统文件路径,保证可以访问到 .py文件 PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('./')"); //3、调用python文件名。当前的测试python文件名是test.py。在使用这个函数的时候,只需要写文件的名称就可以了。不用写后缀。 pModule = PyImport_ImportModule("test"); //4、调用函数 pFunc = PyObject_GetAttrString(pModule, "AdditionFc"); //5、给python传参数 PyObject* pArgs = PyTuple_New(2);//函数调用的参数传递均是以元组的形式打包的,2表示参数个数。如果AdditionFc中只有一个参数时,写1就可以了。这里只先介绍函数必须有参数存在的情况。 PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 2)); //0:表示序号。第一个参数。 PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 4)); //1:也表示序号。第二个参数。i:表示传入的参数类型是int类型。 //6、使用C++的python接口调用该函数 PyObject* pReturn = PyEval_CallObject(pFunc, pArgs); //7、接收python计算好的返回值 int nResult; PyArg_Parse(pReturn, "i", &nResult);//i表示转换成int型变量。在这里,最需要注意的是:PyArg_Parse的最后一个参数,必须加上“&”符号。 //8、结束python接口初始化 Py_Finalize(); }
相关文章
- 在pycharm中如何新建Python文件?_github下载的python源码项目怎么用
- 解决python中导出的pdf不能编辑问题
- python hashlib_Python hashlib模块实例使用详解
- Python里divmod_python yield函数
- gyp ERR! stack Error: Can't find Python executable 'python'
- python入门与基础刷题篇(9)
- 【说站】Python K-means算法的计算步骤
- 【说站】python缺省参数的使用注意
- Python学生信息管理系统课程设计报告_python做的项目管理系统
- Python 生成随机数_python 随机字符串
- 廖雪峰的 Python 教程_python基础教程廖雪pdf
- 【python】如何用python写一个下拉选择框和页签?
- c++基础篇之C++ 模板
- Python使用platform库获取系统信息:操作系统信息、硬件信息、python环境信息
- python阳历转换成阴历的代码详解编程语言
- Linux VIM python 自动补全插件:pydiction详解编程语言
- MySQL与Python的协同运行:一种全新的开发体验(mysql与python)
- Linux下运行Python脚本的步骤简介(linux如何运行python脚本)
- Python与MySQL实现数据分析的完美组合(mysql中python)
- python解析xml模块封装代码
- Linux环境下MySQL-python安装过程分享