C++调用python

其实主要就是设置好python安装路径到环境变量,然后把当前执行的脚本路径也加到sys.path中就可以了。

但是传参还不知道怎么搞。

	Py_SetPythonHome((wchar_t*)L"D:\\soft\\python3.8.5"); // 编辑系统变量,设置python home
	Py_Initialize();

	PyRun_SimpleString("import os,sys");//执行import语句,把当前路径加入路径中
	PyRun_SimpleString("sys.path.append('./../../../sources/python/')"); //
	PyRun_SimpleString("print(os.getcwd())");//测试打印当前路径
	PyRun_SimpleString("exec(open('./../../../sources/python/convertCTxt2Xml.py', encoding = 'utf-8').read())");//python3的exec方法

	Py_Finalize();

   

参考:

C++调用或者运行python文件,包含第三方库_cxn304的博客-优快云博客_c++ python 第三方库

### 如何从C++调用Python代码 要实现从C++调用Python代码的功能,通常会利用Python的嵌入功能。通过这种方式,可以在C++程序中初始化Python解释器并执行Python脚本或函数。以下是具体方法以及相关细节: #### 初始化Python解释器 在C++调用Python的第一步是初始化Python解释器。这可以通过`Py_Initialize()`函数完成[^2]。此函数启动Python运行环境,并允许后续加载模块和执行脚本。 ```cpp #include <Python.h> int main() { Py_Initialize(); // 启动Python解释器 } ``` #### 执行简单的Python语句 一旦Python解释器被成功初始化,就可以使用`PyRun_SimpleString()`来执行单条或多条Python命令。这种方法适用于快速测试或者简单操作场景。 ```cpp PyRun_SimpleString("print('Hello from Python!')"); ``` 上述代码将在控制台打印消息“Hello from Python!”。 #### 调用已定义的Python函数 如果目标是从C++调用特定的Python函数,则需要更复杂的处理流程。首先,在C++端导入包含所需函数的Python模块;其次定位该函数对象;最后准备参数并通过适当接口触发它。 假设有一个名为 `example.py` 的文件,其中定义了一个接受两个整数作为输入并返回其乘积的函数 `multiply(a, b)`: ```python def multiply(a, b): return a * b ``` 对应的C++代码如下所示: ```cpp PyObject* pName = PyUnicode_DecodeFSDefault("example"); PyObject* pModule = PyImport_Import(pName); // 导入module 'example' if (!pModule) { /* 错误处理 */ } // 获取function object 'multiply' PyObject* pFunc = PyObject_GetAttrString(pModule,"multiply"); if(!pFunc || !PyCallable_Check(pFunc)) {/*错误处理*/} // 创建arguments tuple (for two integers) PyObject* argsTuple = PyTuple_Pack(2, PyLong_FromLong(arg1), PyLong_FromLong(arg2)); // Call function & get result as PyObject* PyObject* pValue = PyObject_CallObject(pFunc,argsTuple); long returnValue; if(PyLong_Check(pValue)) { returnValue=PyLong_AsLong(pValue); } /* 清理资源 */ Py_DECREF(argsTuple); Py_XDECREF(pFunc); Py_DECREF(pModule); Py_DECREF(pName); return returnValue; ``` 以上片段展示了如何安全地获取外部Python模块中的函数指针、构造必要的参数列表、实际调用函数并将结果转换回本地数据类型。 #### 结束Python解释器 当不再需要继续使用Python时,应该关闭解释器以释放所有关联资源。这是通过调用`Py_FinalizeEx()`完成的。 ```cpp Py_FinalizeEx(); ``` 注意:虽然这里只讨论了基本概念和技术要点,但在真实项目里还需要考虑异常捕获机制以及其他边界情况管理等问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值