C++ 调用Python文件方法传递字典参数并接收返回值
2018-02-03 15:48
936 查看
首先本地需要安装有Python环境,然后在c++工程中包含Python的头文件,引用Python的lib库。
pyscript.py脚本示例
附加 返回值 Tuple-List 解析
在线文档 https://docs.python.org/
//python 初始化 Py_Initialize(); if (!Py_IsInitialized()) { return; } //运行脚本导入环境变量 PyRun_SimpleString("import sys"); PyRun_SimpleString("import os"); PyRun_SimpleString("import string"); //py文件的存放位置 string strPyPath = string("sys.path.append('") + m_strPyLocation + string("')"); PyRun_SimpleString(strPyPath.c_str()); //载入py脚本 PyObject* pModule = PyImport_ImportModule("pyscript");// PyImport_Import(pName); if (!pModule) { return; } //获取py方法 PyObject* pFunc = PyObject_GetAttrString(pModule, "OnFunc"); //PyDict_GetItemString(pDict, "pyscript"); if (!pFunc || !PyCallable_Check(pFunc)) { return; } //构建py方法字典参数 PyObject *pArgsT = PyTuple_New(1); PyObject* pArgsD = PyDict_New(); PyDict_SetItemString(pArgsD, "key", Py_BuildValue("s", "value")); PyTuple_SetItem(pArgsT, 0, pArgsD); //调用py方法 PyObject *pReturn = PyEval_CallObject(pFunc, pArgsT);//PyObject_CallObject(pFunc, pArgs); if (pReturn == NULL) { return; } //获取py返回值 PyArg_Parse(pReturn, "s", &szBuffer);//char szBuffer[256] = {0}; //clear Py_DECREF(pName); Py_DECREF(pDict); Py_DECREF(pModule); Py_DECREF(pFunc); Py_DECREF(pArgsT); Py_DECREF(pArgsD); Py_DECREF(pReturn); Py_Finalize();
pyscript.py脚本示例
def OnFunc(params): ret='' ret+=params["key"] return ret
附加 返回值 Tuple-List 解析
//调用py方法 PyObject *pReturnTuple =PyObject_CallObject(pFunc, pArgsT0); //PyEval_CallObject(pFunc, pArgsT0); if (pReturnTuple == NULL) return 0; int nTupleSize = PyTuple_Size(pReturnTuple); for (int l = 0; l < nTupleSize; l++) { PyObject *pTupleList = PyTuple_GetItem(pReturnTuple, l); int nTupleListSize = PyList_Size(pTupleList); for (int m = 0; m < nTupleListSize; m++) { PyObject* pTupleListValue = PyList_GetItem(pTupleList, m); int nValue = 0; PyArg_Parse(pTupleListValue, "i", &nValue); std::cout << nValue << std::endl; } }
在线文档 https://docs.python.org/
相关文章推荐
- Python3学习笔记05-字典、文件输入输出、模块、函数参数传递
- JNA调用Delphi7的DLL传递接收中文参数的方法
- Unity使用C#调用C++dll传递指针参数、接收指针返回值
- Java加载jar文件并调用jar文件当中有参数和返回值的方法
- python调用C++,C++回调Python,并传递参数
- c/c++/java,函数调用的参数的传递方法
- 工作随笔——Java调用Groovy类的方法、传递参数和获取返回值
- C# 调用C++DLL传递指向指针的指针参数的方法
- python调用C++ 可执行程序并传递参数
- python 元组和字典中元素作为函数调用参数传递
- C#调用C++DLL,正确接收与传递中文字符方法
- 关于使用c#调用python脚本文件,脚本文件需要传递参数
- flash 调用启动一个.exe文件并向其传递参数的方法
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- 工作随笔——Java调用Groovy类的方法、传递参数和获取返回值
- 【python】c++调用python文件设置参数Py_BuildValue()
- C#调用C++写的dll 函数传递参数问题,请有经验的人详细描述
- Javascript 定时器调用传递参数的方法
- Javascript设置Cookie 后台CS文件接收Cookie,cs文件调用javas的方法
- Javascript设置Cookie 后台CS文件接收Cookie,cs文件调用javas的方法