将 CPP 定义移植到 python
Posted
技术标签:
【中文标题】将 CPP 定义移植到 python【英文标题】:porting CPP defines to python 【发布时间】:2012-02-23 09:20:49 【问题描述】:我有一个充当套接字服务器的程序(用 C/C++ 编写)。我想用python编写客户端。通过 TCP 套接字交换的数据包遵循“自制”协议(简单),使用在 XXX.h 文件中定义为 #define... 的宏。 我想解析 XXX.h 文件以生成等效的 XXX.py XXX.h 文件仅包含 CPP 宏定义(和 cmets),例如:
//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 的想法也是如此。 至少,常量定义应该被转换,所以我不必重写它们两次。 有更好的想法吗?
【问题讨论】:
Convert C++ Header Files To Python 的可能重复项 【参考方案1】:h2py.py
正是这样做的。它包含在工具/脚本中的 Python 发行版(*)中
如果需要转换超过#defines,请看问题Convert C++ Header Files To Python
编辑:(*) 它至少包含在完整的源代码分发中。
【讨论】:
谢谢。我在我的机器(Fedora FC16)上找不到 h2py。 YUM 没有给我任何关于从哪里得到它的提示。尽管如此,我还是找到了源代码(复制/粘贴它),它做了我想要的。如果您知道我应该如何更“干净”地获得 h2py,请告诉我。并感谢您的回答。 @user1159290 我认为有一个单独的包 python-tools 用于 Fedora。但您不需要的只是脚本本身。【参考方案2】:您为什么不使用宏预处理器来执行此操作?这就是他们的目的。
【讨论】:
以上是关于将 CPP 定义移植到 python的主要内容,如果未能解决你的问题,请参考以下文章
将 nodejs 模块移植到 React Native:Object.prototype 未定义