C++调用python,直接调用模块内函数,调用类内函数
来源:互联网 发布:java手机模拟器安卓版 编辑:程序博客网 时间:2024/06/18 12:45
1,直接调用python模块内函数:
//python初始化 Py_Initialize(); if (!Py_IsInitialized()) { printf("初始化失败!"); return -1; } //py文件及函数声明变量 PyObject *pModule = NULL; PyObject *pFunc = NULL; PyObject *pyParam = NULL; PyObject *returnArgs = NULL; //加载 try { pModule = PyImport_ImportModule("main"); } catch(...) { printf("pModule加载异常!"); } if (pModule == NULL) { printf("pModule加载失败!"); return -1; } pFunc = PyObject_GetAttrString(pModule, "myXmlParser"); if (pFunc == NULL) { printf("pFunc加载失败!"); return -1; } //调用 cout << "!!!Hello World!!!------1" << endl; // prints !!!Hello World!!! PyObject *pyParams = PyTuple_New(1); pyParam = Py_BuildValue("s", "xmodel.xml"); PyTuple_SetItem(pyParams,0, pyParam); returnArgs = PyEval_CallObject(pFunc,pyParams); string a; string b; PyArg_ParseTuple(returnArgs, "ss", &a, &b); std::cout<<"a = "<<a<<", b = "<<b<<std::endl; //清理python环境 Py_Finalize(); cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! return 0;
2,调用python模块类内函数:
void printDict(PyObject* obj) { if (!PyDict_Check(obj)) return; PyObject *k, *keys; keys = PyDict_Keys(obj); for (int i = 0; i < PyList_GET_SIZE(keys); i++) { k = PyList_GET_ITEM(keys, i); char* c_name = PyString_AsString(k); printf("%s\n", c_name); }}
//python初始化Py_Initialize();if (!Py_IsInitialized()) {printf("初始化失败!");return -1;}//py文件及函数声明变量PyObject *pModule = NULL;PyObject *pyParam = NULL;PyObject *returnArgs = NULL;//加载try {pModule = PyImport_ImportModule("main");} catch (...) {printf("pModule加载异常!");}if (pModule == NULL) {printf("pModule加载失败!");return -1;}PyObject* pDict = PyModule_GetDict(pModule); //打印出来看一下 printDict(pDict);PyObject* pClass = PyDict_GetItemString(pDict, "XmlParser");PyObject* pInstance = PyInstance_New(pClass, NULL, NULL);//调用cout << "!!!Hello World!!!------1" << endl; // prints !!!Hello World!!!PyObject *pyParams = PyTuple_New(1);pyParam = Py_BuildValue("s", "xmodel.xml");PyTuple_SetItem(pyParams, 0, pyParam);returnArgs = PyObject_CallMethod(pInstance, "myXmlParser", "O", pyParams);string a;string b;PyArg_ParseTuple(returnArgs, "ss", &a, &b);std::cout << "a = " << a << ", b = " << b << std::endl;//清理python环境Py_Finalize();cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!return 0;
附python代码:
'''Created on 2013-8-1@author: nohack'''# import sys# form optparser import OptionParserimport sysimport XModelfrom XModel import parsexml_from XModel import get_root_tagfrom XModel import variableTypedef parseXml(): doc = XModel.parse('xmodel.xml')# rootNode = doc.documentElement# rootObj = agents.factory()# rootObj.build(rootNode)# def print_node(node): print "==============================================" print "node.attrib:%s" % node.attrib if node.attrib.has_key("age") > 0 : print "node.attrib['age']:%s" % node.attrib['age'] print "node.tag:%s" % node.tag print "node.text:%s" % node.text '''class XmlParser: def myXmlParser(self, filename): print filename return filename '''class XmlParser : def myXmlParser(self, filename): print 'aaaaaaaaaaaaaaaaaaaaaaaaaaa =',filename doc = parsexml_('xmodel.xml') rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) if rootClass is None: rootTag = 'variableType ' rootClass = variableType rootObj = rootClass.factory() rootObj.build(rootNode) doc = None sys.stdout.write('<?xml version="1.0" ?>\n') rootObj.export( sys.stdout, 0, name_=rootTag, namespacedef_='', pretty_print=True) print 'xmodel.attr =', rootObj.version_attr modelsObj = rootObj.get_models() modelObj = modelsObj.get_model() for model in modelObj : print model.get_file() print model.get_enabled() agentsObj = rootObj.get_agents() xagentObj = agentsObj.get_xagent() for xagent in xagentObj : print 'agentname =', xagent.get_name() print 'agentdes =', xagent.get_description() memoryObj = xagent.get_memory() variableObj = memoryObj.get_variable() for variable in variableObj : print 'mem.name =', variable.get_name() return (xagent.get_name(),xagent.get_description()) #return rootObj # Enable Python to collect the space used by the DOM. # '''if __name__ == '__main__': print "****************xml*********************start"# parseXml() xml = XmlParser() xml.myXmlParser('xmodel.xml') print "****************xml*********************end" print "\n\n\n" print "abcdefgh"'''
- C++调用python,直接调用模块内函数,调用类内函数
- python 动态调用模块内的函数
- js函数内直接调用后台方法
- C中如何调用C++函数、类内函数
- C中如何调用C++函数、类内函数
- C中如何调用C++函数、类内函数
- gcc内嵌汇编调用C函数
- js调用iframe内函数
- python 内嵌函数中,return调用函数的区别
- 在linux中 应用程序如何调用模块内的函数
- 在linux中 应用程序如何调用模块内的函数
- 在linux中应用程序如何调用模块内的函数
- 在linux中 应用程序如何调用模块内的函数
- 在linux中应用程序如何调用模块内的函数
- Python 调用 C函数
- python 调用 c 函数
- 构造函数内如何调用虚函数
- JAVA构造函数内调用方法函数
- 35岁开始学习Java之前世今生
- oracle11.2.0.3.0下载链接
- php Zend Opcache,xcache,eAccelerator缓存优化详解(具体根据个人需要选择其一即可,功能都一样切勿重复选择)
- 总结2
- memcache c操作
- C++调用python,直接调用模块内函数,调用类内函数
- 如何欣赏音乐(四)
- FastDB分析
- “兼容模式”错杂谈
- UVA 539 - The Settlers of Catan 解题报告
- 什么是webservice,什么情况下使用,如何使用?
- codeforces 148 Not Wool Sequences
- Session,有没有必要使用它?
- loner_li 机试题 现有1~100共一百个自然数,已随机放入一个有98个元素的数组a[98]。