从python运行c ++代码

时间:2012-06-20 06:08:16

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

我想执行一个代码helloword.cpp,它从控制台接受一些参数解析那些参数,然后在控制台中输出“hello world”。

现在,我想从python脚本parsearguments.py

解析这些参数

例如:

def parse_arguments:
  ...# some code
  return arguments

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

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

4 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:6)

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

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

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

答案 2 :(得分: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。另一个缺点是大型项目的编译变得缓慢。非常非常慢。

答案 3 :(得分:2)

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

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

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