10

私が作成している 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 モジュールを開発するのは初めてで、公式ドキュメントはあまり役に立ちませんでした。

Buffer Protocol は私の問題に対する最善の解決策ですか? もしそうなら、どうすれば私の配列をCからPythonに返すことができますか?

4

1 に答える 1

8

最後に、リスト オブジェクトを作成し、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; 
于 2013-04-05T11:49:36.373 に答える