用Python运行C++代码

12

我想要执行一个名为helloworld.cpp的代码,它从控制台中获取一些参数并解析这些参数,然后在控制台中打印出"hello world"。

现在,我想从一个名为parsearguments.py的Python脚本中解析这些参数。

例如:

def parse_arguments:
  ...# some code
  return arguments

现在,我如何在Python和C++之间进行通信。 我一直在阅读,并且看到了Cython、Boost.Python等选项,但我很难找到正确的简单hello world示例。

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


5
不能直接执行C++源代码。 - Ignacio Vazquez-Abrams
你的解决方案听起来不太好,但也许我缺少一些上下文信息。你为什么首先决定用Python解析参数? - user500944
@Grigory:我通常使用Python,但现在我正在使用一个用C++编写的框架。目前,我首先从Python中收集数据并进行推断...然后需要将这个推断传递给C++框架。目前,我在中间步骤中将所有内容保存在文本文件中,然后读取该文件到C++中,但我想将它们集成在一起...最好的方法是什么?谢谢。 - frazman
@IgnacioVazquez-Abrams:你好。感谢您的评论。那么有什么好的方法可以解决这个问题吗?谢谢。 - frazman
首先,告诉我们你真正拥有的东西。 - Ignacio Vazquez-Abrams
@IgnacioVazquez-Abrams:复制我刚写的评论“我正在使用一个用C++编写的框架,而我大多数时候使用Python...目前,我首先从Python中收集数据并推断出一些东西..然后需要将这个推断传递给那个C++框架。目前,我在中间步骤中将所有内容保存在文本文件中,然后读取该文件到C++中,但我想将它们集成在一起..最好的方法是什么。谢谢。”谢谢。 - frazman
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++代码编译成共享库。


8
如何将Python生成的任何文本传递到C++程序的标准输入中?基本上,您需要使用Python的subprocess模块启动C++程序并将文本转储到其标准输出中。
如果您的C++程序需要在后台单独运行,则可以尝试另一种形式的进程间通信,例如Unix域套接字。
使用boost :: python也是一种选择,但可能会更难处理。

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的标准。另一个缺点是编译大型项目变得非常缓慢。非常非常缓慢。

2

对我来说,使用boost.python听起来是一个不错的解决方案。但这取决于您的C ++经验,这可能相当棘手。一个好的起点在这里:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接