1个解析ip的python代码,文件名为ipParser.py
class IPParser:
def __init__(self):
pass
def _parse_ip( self, line ):
segs = line.split(".")
if len(segs) != 4:
return (False,"Invalid input format : %s" %(line))
cells = []
for seg in segs:
cell = []
for i in seg.split(","):
if '-' not in i:
cell.append(i)
else:
start,end = i.split("-")
cell += [ str(i) for i in range( int(start), int(end) + 1)]
cells.append(cell)
hosts = []
for s0 in cells[0]:
for s1 in cells[1]:
for s2 in cells[2]:
for s3 in cells[3]:
host = ".".join([s0,s1,s2,s3])
hosts.append(host)
return hosts
def parse_ip( self, lines ):
hosts = []
for line in lines:
for sub_line in line.split(" "):
hosts += self._parse_ip(sub_line)
return hosts
1个公共使用的python代码,文件名为shareFun.py
def parseStr(s,delimiter):
return s.split(delimiter)
下面是c++代码
void TestMultiArgsAndClass()
{
Py_Initialize();
//****************下面引用shareFun.py的代码
PyObject *pModule =PyImport_ImportModule("shareFun");//导入py模块
PyObject *pFunc= PyObject_GetAttrString(pModule, "parseStr"); //引入py模块中的函数
//建立形参
PyObject *pArgs = PyTuple_New(2);
PyTuple_SetItem(pArgs, 0, Py_BuildValue("s", "10.0.1.1-10;10.0.2.11-13"));
PyTuple_SetItem(pArgs, 1, Py_BuildValue("s", ";"));
//说明: py模块中的parseStr函数的形参为两个str,这里传递的pArgs是元组,原因是PyEval_CallObject的第2形参的格式要求;
PyObject *pReturn = PyEval_CallObject(pFunc, pArgs);//调用函数
//***************下面引用ipParser.py的代码
PyObject * pModule2 =PyImport_ImportModule("ipParser");
PyObject *pClassIpParser = PyObject_GetAttrString(pModule2, "IPParser");
//上面两个步骤与导入shareFun.py步骤相同
//类的实例
PyObject *pInstanceIpParser = PyInstance_New(pClassIpParser, NULL, NULL);
//调用类对象pInstanceIpParser的parse_ip方法,形参为pReturn // Py_BuildValue("s","parse_ip") 将c字符串转为python字符串
PyObject * prrr = PyObject_CallMethodObjArgs(pInstanceIpParser, Py_BuildValue("s","parse_ip"), pReturn,NULL);
//处理返回值:
int size = PyList_Size(prrr);//prrr 为列表
cout << "返回列表的大小为: " << size << endl;
for(int i=0;i<size;++i)
{
PyObject *pNewAge = PyList_GetItem(prrr,i);//相当于 python中的prrr[i]
char * newAge;
PyArg_Parse(pNewAge, "s", &newAge);//将python的字符串转为c字符串
cout << newAge << endl;
}
Py_Finalize();
}
结果: