11

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

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

例如:

def parse_arguments:
  ...# some code
  return arguments

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

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

4

4 回答 4

11

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

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

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

于 2012-06-20T06:20:07.963 回答
8

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

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

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

于 2012-06-20T06:19:52.457 回答
4

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

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

于 2012-06-20T06:50:25.333 回答
2

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

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

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

于 2012-06-20T06:20:30.193 回答