-
-
[原创]C/C++语言编写python扩展模块解析python脚本多参数
-
发表于:
2021-8-6 18:02
12758
-
[原创]C/C++语言编写python扩展模块解析python脚本多参数
1 |
背景:使用C / C + + 语言编写python扩展模块,python脚本中传入元组参数,元组中包含不定个数的字符串。
|
使用C/C++语言编写python扩展模块详细内容大致如下:
1.新建一个dll文件,导出一个C语言接口函数:PyInit_XXX,XXX为动态库模块名称
2.在上述导出函数中使用PyModule_Create函数创建结构体(实际中稍微复杂一点)
3.形式如:{ "alalysisTuple", PyAlalysisTuple, METH_VARARGS, "" }, //可变参数,当在python脚本中调用函数alalysisTuple,即可映射到自己写的C语言函数PyAlalysisTuple
4.windows下将dll后缀改为pyd,放到py脚本可以识别的路径
5.在python脚本中使用语句 from dllname import alalysisTuple,之后即可在脚本中调用alalysisTuple函数
动态库中PyAlalysisTuple函数如下:

1
2
3
|
如果size更大,那就需要写更多的 else if 函数,此时可以使用一个临时的办法,例如限制size的大小,如设置size最大为 16 ,那么声明 16 个变量,或者一个char * str [ 16 ]数组,然后调用PyArg_ParseTuple函数,传入的 format 中有 16 个s,后面再传入 16 个字符串指针的地址,可以作为临时方法,如果size大于 16 ,那么就提示参数过多,不合法。
还有一个方案,可以使用一个裸汇编函数去封装PyArg_ParseTuple,在汇编函数中展开栈参数调用PyArg_ParseTuple,PyAlalysisTuple如下:
|
[注意]看雪招聘,专注安全领域的专业人才平台!