将 C++ 程序输出与 Python 脚本链接

Posted

技术标签:

【中文标题】将 C++ 程序输出与 Python 脚本链接【英文标题】:Link C++ program output with Python script 【发布时间】:2015-01-21 17:49:29 【问题描述】:

我有一个 C++ 程序,它使用一些非常具体的方法来计算数据集(30,000 个元素)的成对距离。输出文件为 20 GB,如下所示:

点1,点2,距离x pointi, pointj, distancexx ......

然后我将文件输入到 Python 并使用 Python (NumPy) 进行聚类。使用 Python 读取输出文件需要很长时间。有没有办法将 C++ 程序直接与我的 Python 代码连接以节省中间文件的 I/O 时间?也许使用 SWIG?

【问题讨论】:

您可能会使用管道:en.wikipedia.org/wiki/Pipeline_(Unix) 【参考方案1】:

我假设您一直在保存 ascii。您可以修改您的 C++ 代码以编写二进制文件,然后使用 numpy.fromfile 读取它。

为了更直接的连接,您可以使用 swig 将您的 C++ 代码包装为一个库(删除 main() 并从 Python 驱动它)。这允许您在 C++ 和 Python 之间共享数组的内存。

您可以在 C++ 端使用 Python 的 buffer protocol 以及在 Python 端使用 numpy.frombuffer。或者您可以使用numpy headers 直接在 C++ 中处理 numpy 数组。这是使用第二种方法的小swig example project。 (免责声明:我写的。)

【讨论】:

以上是关于将 C++ 程序输出与 Python 脚本链接的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 程序将使用的 Python 脚本中导入 cpython 模块?

使用 pipe() 和 fdopen() 将数据从 Python 脚本传递到 Windows 中的 C++ 应用程序

如何从 C++ 程序运行 python 脚本?

怎样让Python脚本与C++程序互相调用

从 c++ 代码运行 python 脚本并在 c++ 中使用 pythons 输出

请教如何在没有安装python的环境中执行py脚本