python调用c++类内静态函数_C++调用python,直接调用模块内函数,调用类内函数

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<

//清理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 OptionParser

import sys

import XModel

from XModel import parsexml_

from XModel import get_root_tag

from XModel import variableType

def 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"

'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值