【问题标题】:running c++ code from python从 python 运行 c++ 代码
【发布时间】:2012-06-20 06:08:15
【问题描述】:

我想执行一个代码 helloword.cpp,它接受来自控制台的一些参数,解析这些参数,然后在控制台中打印“hello world”。

现在,我想从 python 脚本 parsearguments.py 中解析这些参数

例如:

def parse_arguments:
  ...# some code
  return arguments

现在,我如何在 python 和 c++ 之间进行通信。 我一直在阅读并看到 cython、boost python 是选项,但我很难找到正确的简单 hello world 示例。

任何建议将不胜感激。 谢谢

【问题讨论】:

  • 一个不执行C++源代码。
  • 您的解决方案对我来说听起来不太好,但也许我缺少一些上下文。你为什么决定首先用 Python 解析参数?
  • @Grigory:我使用的是用 c++ 编写的框架之一,而我主要使用 python ......到目前为止,我首先收集数据并从 python 中推断出一些东西......然后那个推断是需要传递给那个 C++ 框架。截至目前,我在中间步骤中将所有内容保存在一个文本文件中,然后将该文件读入 C++,但我想将它们集成在一起。什么是最好的方法。谢谢
  • @IgnacioVazquez-Abrams:嗨。感谢您的评论。那么解决这个问题的好方法是什么。谢谢。
  • 首先,告诉我们您真正拥有什么。

标签: c++ python ctypes cython boost-python


【解决方案1】:

要在 python 中执行 C++ 代码,你可以有效地使用 boost python,这里有一个教程: http://www.boost.org/doc/libs/1_59_0/libs/python/doc/index.html 您在 C++ 代码之外编写了一种包装器。

如果是 C 代码,python 有一个叫做 ctypes 的内部库。

在这两种情况下,您都应该将 C/C++ 代码编译到共享库中。

【讨论】:

    【解决方案2】:

    如何将您使用 Python 生成的任何文本传递到您的 C++ 程序的标准输入中?基本上,您必须使用 Python 的 subprocess 模块来启动 C++ 程序并将文本转储到其标准输出中。

    如果您的 C++ 程序需要在后台单独运行,您可以尝试其他形式的进程间通信,例如 unix 域套接字。

    使用 boost::python 也是一种选择,但处理起来可能有点困难。

    【讨论】:

      【解决方案3】:

      除了 Boost.python 之外的其他几个选项是 SIP 和 SWIG(简化的包装器和接口生成器)。与 Boost 一样,SIP 和 SWIG 也是开源的。

      SWIG 特别强大,但也有点毛茸茸。它支持将 C 和 C++ 与大量其他语言连接,包括(不是完整列表)Python、Perl、Lua、Tcl/Tk、Ocaml、Ruby、Java。 SWIG 的一个方面是它解析您的 C++ 标头。这有好处也有陷阱。一个好处是它完成了生成接口的大部分工作。一个缺点是它不能处理 C++ 2003 的一些黑暗角落,而且它根本没有升级到 C++11。另一个缺点是大型项目的编译变得很慢。非常非常慢。

      【讨论】:

        【解决方案4】:

        对我来说,使用 boost.python 听起来是个不错的解决方案。但根据您的 C++ 经验,这可能会非常棘手。一个好的开始点在这里:

        http://wiki.python.org/moin/boost.python

        Boost.Python 使您能够将 C++ 类和成员函数导出到 Python,以便能够从那里使用它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-03-31
          • 1970-01-01
          • 1970-01-01
          • 2017-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多