对于我正在创建的 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文档我发现缓冲协议 http://docs.python.org/3.2/c-api/buffer.html。但这是我第一次开发 python 模块,官方文档对我帮助不大。
Buffer Protocol 是解决我的问题的最佳方案吗?如果是这样,我如何将数组从 C 返回到 python?
最后我做的是创建一个列表对象PyListObject
并向该列表附加一个字典,其中包含我想要向 python 用户显示的结构的值。
希望对有同样疑问的人有所帮助,代码如下:
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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)