C/C++调用Python方法

#include <iostream>

#include "Python.h"

PyObject* CallFunc(const char* py_path, const char* name_module, const char* name_func, PyObject* pyArgs)

{

std::string temp = "sys.path.append('" + std::string(py_path) + "')";

const char* path = temp.c_str();

PyRun_SimpleString("import sys");

PyRun_SimpleString(path);

PyObject* pyMod = PyImport_ImportModule(name_module);

if (!pyMod)

{

printf("Cant open Py file\n");

return 0;

}

PyObject* pyFunc = PyObject_GetAttrString(pyMod, name_func);

if (!pyFunc)

{

printf("Get function failed\n");

return 0;

}

PyObject* pyReturn = PyObject_CallObject(pyFunc, pyArgs);

if (!pyReturn)

{

printf("Call function failed!\n");

return 0;

}

printf("Call function successfully!\n\n");

return pyReturn;

}

int main()

{

Py_Initialize();//初始化python解释器

PyObject *ptrPyArgs = PyTuple_New(2);

PyTuple_SetItem(ptrPyArgs, 0, Py_BuildValue("i", 3));

PyTuple_SetItem(ptrPyArgs, 1, Py_BuildValue("i", 4));

const char* path = "E:\\VS_WORK\\PythonTest\\PythonTest";//py文件所在目录,有些版本不支持双斜杠例如vs2019

const char* fileName = "sum";//不加py后缀

const char* funcName = "mySum";//函数名

PyObject *PyRet = CallFunc(path, fileName, funcName, ptrPyArgs);

int data = -1;

int data1 = -1;

//PyArg_Parse(PyRet, "i", &data);//返回值只有一个使用PyArg_Parse解析

PyArg_ParseTuple(PyRet, "ii", &data, &data1);//返回值有多个使用PyArg_ParseTuple解析

std::cout << data << std::endl;

Py_Finalize();

system("pause");

return 0;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容