对于我正在创建的python模块,我想向python用户传递一个这样的结构数组:
struct tcpstat
{
inet_prefix local;
inet_prefix remote;
int lport;
int rport;
int state;
int rq, wq;
int timer;
int timeout;
int retrs;
unsigned ino;
int probes;
unsigned uid;
int refcnt;
unsigned long long sk;
int rto, ato, qack, cwnd, ssthresh;
};
我认为Py_BuildValues
是我正在寻找的功能。但似乎不是。查看Python文档,我找到了Buffer Protocol。但这是我第一次开发python模块,官方文档对我没什么帮助。
缓冲协议是我问题的最佳解决方案吗?如果是这样,我怎么能将我的数组从C返回到python?
答案 0 :(得分:7)
我最终做的是创建一个带有PyListObject
的列表对象,并在该列表中附加一个字典,其中包含我要向python用户显示的struct的值。
希望这会帮助有同样疑问的人,这是代码:
PyObject *dict = NULL;
PyListObject *list;
list = (PyListObject *) Py_BuildValue("[]");
int i = 0;
for (i; i < stats_length; i++) {
dict = Py_BuildValue("{s:i}", "LPort", stats[i].lport);
PyList_Append(list, dict);
}
return (PyObject *) list;