我想执行一个代码helloword.cpp,它从控制台接受一些参数解析那些参数,然后在控制台中输出“hello world”。
现在,我想从python脚本parsearguments.py
解析这些参数例如:
def parse_arguments:
...# some code
return arguments
现在,我如何在python和c ++之间进行通信。 我一直在阅读并看到cython,boost python是选项,但我很难找到正确的简单hello世界示例。
任何建议将不胜感激。 感谢
答案 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,以便能够从那里使用它们。