将一段 C++ 代码包装成 Python

Posted

技术标签:

【中文标题】将一段 C++ 代码包装成 Python【英文标题】:Wrapping a piece of C++ code into Python 【发布时间】:2012-03-06 14:54:07 【问题描述】:

我有一段生成数据的 C++ 代码。我想将数据公开给 Python。但这并不像听起来那么琐碎……

假设这个 C++ 编译成二进制文件cppcode。由于框架搭建的方式比较复杂,我只能将代码运行为

./cppcode command line arguments 

在 cppcode 内部,它会生成我想从 Python 访问的数据。我知道我是否可以以某种方式将程序重写为

CppClass cpp; 
cpp.run( args );

然后我可以用 Boost Python 封装 CppClass,构建一个实例,使用参数运行,并访问生成中的数据。

但现在我只能以./cppcode command line arguments 运行代码

我不能只从 Python 中调用./cppcode,因为在 ./cppcode 完成后,它的内存将被系统重新收集,我再也无法从 Python 中看到它了。有没有办法解决这个问题?

我能想到:(1)让./cppcode把数据转储到磁盘,让python读取。 (2) 将数据转储到标准输出并通过管道传输到 python 脚本中。但无论哪种方式,我都必须在 Python 中进行一些可能很慢的字符串解析。有没有办法绕过它?

【问题讨论】:

我会先选择(2),这应该很简单,因为您可以控制数据的格式。只需以逗号分隔值之类的简单格式输出,可以使用string.split() 快速解析。如果结果太慢,我会考虑使用 Boost Python 之类的东西,这将需要更多的工作来实现。 请通过回馈社区来感谢我们。 @NiklasB.:逗号分隔的值比这更复杂一些,因为它们可能包含包含逗号的字符串。 Python 确实有一个 csv 模块,它可以很好地处理这个问题。 我同意 NiklasB。 Unix 是为管道设计的,而 Python 是为字符串解析而设计的。两者都非常快。编写代码来做到这一点应该不难。我会这样做,如果速度不够快,请考虑使用更快的数据传输方法。 @mathieau:对不起,我不是指完整的 CSV 文件格式...对于简单的数据,您不需要引号转义之类的东西,因此您可以在逗号处拆分。当然,取决于数据的类型。也许如果输出涉及复杂的字符串(或者只是包含逗号的字符串),可以使用另一种分隔符,如\n 来避免问题(当然,假设字符串不包含换行符)。 【参考方案1】:

您可以将 ccpcode 中的 JSON 格式的数据转储到磁盘上,然后简单地使用 python 中的 simplejson 来解析它。这样您就不必编写任何自己的解析器了。

以下是 C++ JSON 模块的一些示例:https://***.com/questions/245973/whats-the-best-c-json-parser

【讨论】:

以上是关于将一段 C++ 代码包装成 Python的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SWIG 在 C++ API 上生成 C 包装器? [复制]

如何将一段字符串连接成一个字符串?

Java将一段逗号分割的字符串转换成一个数组

将多个 C++ 类包装成一个 Python 类

如何创建一个.so 文件,其中仅包含用 C 代码包装的 C++ 代码 - OpenCV 相关?

sql语句,怎么将一段日期分割成每日?请高人解答。