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

标签 c++ python boost-python python-c-api python-c-extension

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

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

./cppcode {command line arguments} 

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

CppClass cpp; 
cpp.run( args );

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

但现在我只能将代码运行为 ./cppcode {命令行参数}

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

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

最佳答案

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

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

关于c++ - 将一段 C++ 代码包装成 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9586055/

相关文章:

python - 理解展平一系列序列?

python - 如何从 python 模块 (boost.python) 导入类?

c++ - 指针可以用来遍历字符数组吗?

c++ - 在 C++ 的运行时确定返回类型时该怎么办?

c++ - 初始化虚拟继承层次结构

c++ - 在运算符重载中调用函数?

python - 从多形状数组的列创建对角矩阵

python - 我如何理解这个简单的列表?

python - 链接 Boost-Python Hello World

c++ - 在 C++ 中使用 Boost-Python 访问 Python 中定义的函数数组