我有一个程序(用C / C ++编写),它充当套接字服务器。我想在python中编写客户端。通过TCP套接字交换的数据包遵循“自制”协议(简单),使用在XXX.h文件中定义为#define ...的宏。 我想解析XXX.h文件以生成等效的XXX.py XXX.h文件仅包含CPP宏定义(和注释),例如:
//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)
我一直在短暂地看着swig,但不相信它确实做了我正在寻找的东西。手动解析XXX.h文件并匹配正则表达式感觉不对。在我的* .py文件上运行CPP的想法也是如此。 至少,应该转换常量定义,所以我不必重写它们两次。 有更好的想法吗?
答案 0 :(得分:3)
h2py.py
正是如此。它包含在工具/脚本
如果您需要转换超过#defines,请参阅问题Convert C++ Header Files To Python
编辑:(*)它至少包含在完整的源代码分发中。
答案 1 :(得分:1)
为什么不使用宏预处理器来执行此操作?这就是它们的用途。