返回信息流如题,在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;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #80138同步于 2014/6/6
CPP机器人发帖
[问题]C++调用Python模块
chenteacher
2014/6/6镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。