2012-02-23 7 views
1

私はソケットサーバーとして動作するプログラム(C/C++で書かれています)を持っています。私はPythonでクライアントを記述したいと思います。 TCPソケットを介して交換されるパケットは、XXX.hファイルで#define ...として定義されたマクロを使用して "自家製"プロトコル(単純)に従います。 私は同等XXX.py XXX.hファイルのみCPPマクロ定義(とコメント)を含んを生成するXXX.hファイルを解析したいと思います例えば:CPPを移植することはPythonに定義されています

//the following commands are used when talking to the server 
//A tcp message is: the command(32bit word) followed by the flags (32 bits) 
#define CMD_DO_SOMETHING1 1 //this does something 
#define CMD_DO_SOMETHING2 2 //that does something else 
#define FLAG1 0x0001  //These flags are used as parameter in cmd2 
#define FLAG2 0x0002 
#define FLAG3 0x0004 
#define FLAG4 0x0008 
#define TEST_FLAG1(x) (x&FLAG1) //this tests for flag1 

は、私のような何かを取得したいと思い:XXX.py:

CMD_DO_SOMETHING1=1 
CMD_DO_SOMETHING2=2 
FLAG1=1 
... 
def test_flag1(x): 
    return(x&flag1) 

私は簡単に泳ぎを見てきましたが、私が探していたことを本当に確信していませんでした。手動でXXX.hファイルを解析し、正規表現にマッチするのは間違っています。私の* .pyファイルでCPPを実行するという考え方もそうです。 少なくとも、定数の定義を変換して2回書き直す必要はありません。 もっと良いアイデアですか?

+0

[Convert C++ Header Files To Python]の複製が可能です。(http://stackoverflow.com/questions/374217/convert-c-header-files-to-python) – Marcin

答えて

3

h2py.pyとまったく同じです。それは、少なくとも完全なソースに含まれています(*):あなたがの#define以上を変換する必要がある場合は、質問Convert C++ Header Files To Python

EDITを参照してくださいツール/スクリプト

にPythonディストリビューション(*)に含まれています分布。

+0

ありがとうございました。私のマシン(Fedora FC16)にh2pyが見つかりません。 YUMは私にそれをどこから得るべきかのヒントを与えていない。私はそれにもかかわらず、ソース(コピー/貼り付け)を見つけ、それは私が望むことをします。どのようにh2pyをもっと「きれいに」得るべきか分かっているなら、私に知らせてください。あなたの答えに感謝します。 – user1159290

+0

@ user1159290 Fedoraには別のパッケージがあると私は思います。しかし、あなたはスクリプトそのもの以上を必要としません。 –

1

なぜマクロプリプロセッサを使用しないのですか?これが彼らのためのものです。