BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #80138同步于 2014/6/6
CPP机器人发帖

[问题]C++调用Python模块

chenteacher
2014/6/6镜像同步0 回复
如题,在C++程序中调用一个python模块,python模块中的类下有若干方法,__init__中有若干参数,求问如何设置多个参数,并且运行程序。以下是代码。 #include<Python.h> #include<iostream> #include<string> using namespace std; int main() { Py_Initialize(); if(!Py_IsInitialized()) return -1; PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('/opt/adam/adam-lib/adam-util')"); PyRun_SimpleString("sys.path.append('/opt/adam/adam-lib/adam-net')"); PyRun_SimpleString("sys.path.append('/opt/adam/proto/py')"); PyRun_SimpleString("sys.path.append('/home/test/py')"); PyObject * pModule = PyImport_ImportModule("adam_monitor"); if(!pModule) { PyErr_Print(); printf("cann't open python file\n"); return -1; } /*PyObject *pDict = PyModule_GetDict(pModule); if(!pDict) { printf("cann't find dictionary\n"); return -1; } PyObject *pClassAdam_Monitor = PyDict_GetItemString(pDict, "Adam_Monitor"); if(!pClassAdam_Monitor) { printf("cann't find class adam_Monitor"); return -1; } PyObject *pInstanceAdam_Monitor = PyInstance_New(pClassAdam_Monitor, NULL, NULL); if(pInstanceAdam_Monitor) { printf("cann't find instance Adam_Monitor"); return -1; } int i; char *s;*/ PyObject * pClass = PyObject_GetAttrString(pModule, "Adam_Monitor"); PyObject * pTuple = PyTuple_New(7);//设置参数 PyTuple_SetItem(pTuple , 1, Py_BuildValue("s", "::ffff:127.0.0.1")); PyTuple_SetItem(pTuple , 2, Py_BuildValue("i", 22223)); PyTuple_SetItem(pTuple , 3, Py_BuildValue("i", 9)); PyTuple_SetItem(pTuple , 4, Py_BuildValue("s", "filter")); PyTuple_SetItem(pTuple , 5, Py_BuildValue("s", "filter")); PyTuple_SetItem(pTuple , 6, Py_BuildValue("s", "192.168.1.1")); PyTuple_SetItem(pTuple , 7, Py_BuildValue("i", 6543 )); if(!pTuple) { printf("Tuple error\n"); return -1; } PyObject * pObject = PyEval_CallObject(pClass, pTuple); PyObject * pFunc = PyObject_GetAttrString(pObject, "init"); PyEval_CallObject(pFunc, NULL); Py_DECREF(pModule); Py_DECREF(pClass); Py_DECREF(pTuple); Py_DECREF(pObject); Py_DECREF(pFunc); Py_Finalize(); return 0; }
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。