2011-12-21 22 views
2

私は、いくつかの生データの分析を実行するために使用されるスタンドアロンのPythonモジュールを持っています。モジュールはうまくいっています。PythonからC structを受け取る/取得する方法

私は出力でさらに処理を行うCソースのPythonモジュールによって生成された出力が必要です。ここで

は、流れの目安です:

  1. Cソースは、Pythonモジュールを呼び出します。
  2. Pythonモジュールは、生成された結果をC構造体に埋め込み、 を何らかの形でCソースに渡します。

CのソースコードでPythonモジュールの結果を取得する最も良い方法は何ですか?

結果を入力するには、次のようなものを使用しますか?

from ctypes import * 
class result(Structure):  
    _fields_ = [("status", c_int), ...] 
+0

実際には最も良い方法ではありませんが、最も簡単な方法は、Pythonモジュールに出力を一時ファイルにダンプし、Cでファイルを読み込むことです。 – wim

+0

これは最後の方法だと思いますか? – MA1

答えて

3

私はあなたのctypesモジュールを使用したくないと思う - そのモジュールは Pythonコードではなく、他の方法で回避からのDLLと共有オブジェクトにアクセスするためです。

CプログラムがPythonモジュールを呼び出す方法を指定していません。それは

  • Cからpopenのようなものを使用してPythonスクリプトを呼び出すのだろうか?もしそうなら、あなたはPythonでstdoutにデータを書いて、Cで適切にデータを解釈することができます。これのために独自の小さなプロトコルを設計する必要があります。これはアドホックなプロトコルでも、JSONのような既存のフォーマットを使用することもできます。これにはCとPythonの両方のライブラリがあります。

  • embed the Python VM in your C program?次にあなたがCからPython関数の出力がされる、適切なPy*値にCの値を変換し、あなたがPythonの関数の引数として渡すことができPyTupleにそれらを配置する必要がありますPyObject、これはデータを取得するために(Cで)解凍する必要があります。

どちらの場合でも、梱包と開梱を自分で行う必要があります。

+0

大変ありがとうございます。現在私はpythonスクリプトを呼び出すためにpopenを使用しています。私は迅速な解決策が必要なので、私はstdoutからデータを読み書きします。 – MA1

関連する問題