Cで大きな構造体を静的に宣言しましたが、この同じデータをPythonで分析する必要があります。私はむしろエラーを避けるためにこのデータをPythonに再コピーしないでしょう、Pythonでこのデータに直接アクセスする(読み取り専用)方法はありますか?私は「ctypesの」を見て、SWIG、及びそれらのどちらもが私が探しているものを提供するために、思われている....PythonからC-宣言されたネストされた構造体にアクセスする
例えば、私が持っている:
/* .hファイル*/
typedef struct
{
double data[10];
} NestedStruct;
typedef struct
{
NestedStruct array[10];
} MyStruct;
/* .cファイル*/
MyStruct the_data_i_want =
{
{0},
{
{1,2,3,4}
},
{0},
};
理想的には、私は私が取得できるようになる何かをしたいと思いますこれをPythonに入れて、the_data_i_want.array[1].data[2]
またはこれに類するものを介してアクセスしてください。何かご意見は?私は自分の.cファイルから作成した.soファイルをコンパイル/インポートすることができたという意味で "仕事"をしていましたが、cvarsを使ってそのファイルにアクセスすることはできませんでした。多分別の方法がありますか?これは難しいはずがないようです...。
実際に、私はそれを理解しました。私の評判は8時間以内に私自身の質問に答えることができないので、私はこれを追加しています。私は8時間後に覚えておく必要がないので今すぐ追加します。私は理解できないほどの理由があると確信しています。
それを実演しました。私は図書館に私の.cファイルをコンパイルした第一
:次に
が、私はデータ開催するPythonのクラスを定義するタイプを使用しました。そして、
from ctypes import *
class NestedStruct(Structure):
_fields_ = [("data", c_double*10)]
class MyStruct(Structure):
_fields_ = [("array", NestedStruct*10)]
を、私はに共有ライブラリをロードパイソン:
my_lib = cdll.LoadLibrary("my_lib.so")
はその後、私はデータを取得するには、 "in_dll" メソッドを使用:
それは私の実際のデータ構造は3つのレベルにネストされているので、私は少しここに構文を台無しにしていることと、私はここで説明のために簡略化したかったC. the_data_i_want.array[1].data[2]
注であるかのように
その後、私はそれをアクセスすることができました。
SWIGについては、http://stackoverflow.com/q/8114030/168175 – Flexo
に興味があるかもしれません。今度は、ソリューションを実際の回答に移行し、それを受け入れるのはいい時期です。 – augurar