2012-11-21 109 views
7

一个C++函数我遇到的情况,我在C++类的一些功能,我希望能够使用Python脚本调用它们。比方说,我有一个函数通过调用一个Python脚本

void greet(_msg); 
    std::cout >> _msg >> std::endl; 

我希望能够称之为低谷定制的Python调用和使用参数传递给它,例如

saySomething("Hello") 

作为.py文件我想它调用问候函数并将“Hello”作为参数传递。我已经完成了一个关于在C++中嵌入python的研究份额,我设法使用标准的Python/C API从python脚本读取值并运行一个来自C++的Python函数并将参数传递给它,但我似乎无法得知如何实现这一特定结果。

我已经看过ctypes和各种wrappin库,如boost:python或swig,但我似乎无法理解他们可以帮助我实现我想要的程度。

+0

“从运行C Python中的函数++”你是什么意思与?如果您想将C/C++作为Python API进行屏蔽,您可以应用C/C++的Python绑定的基本规则,还可以使用boost :: python库,从C++代码开始编写python API时可以更轻松地进行处理。 – user1797612

+0

对不起,我不清楚 - 我想要的是能够有一个python脚本,调用一个C++类的特定功能,可以传递参数给它。 或多或少像一个GUI,但通过python脚本而不是按钮完成。 – leoncvlt

+0

所以你正在寻找这个http://docs.python.org/3.2/extending/extending.html或boost :: python(可能更容易),并且这个问题的答案可以是一个很好的起点http: //stackoverflow.com/questions/276761/exposing-ac-api-to-python。无论如何,你想为C++代码生成python api,就是这样,只需按照官方指南或使用这个库。 – user1797612

回答

5

取决于哪个版本的Python你有兴趣,2.x或3.x中, 通过扩展和嵌入Python解释器2.x3.x阅读。你只在延长的Python有兴趣,所以部分1.扩展Python用C或C++将为您提供完整的解释如何实现你为了需要什么才能够调用用C++实现的Python脚本的功能。

当然,也有众多的图书馆和发电机,让你可以换C/C++的API的Python(如Boost.PythonSWIG),但你的情况听起来很简单,是学习它的目的是海事组织更好地熟悉与Python C API。即使你使用这些工具,你仍然需要经常使用Python C API,或者至少理解它。

3

可以使用weave.inline()函数,这是SciPy的软件包的一部分,编译和执行C/C++文件,并从你的Python脚本中得到它们的输出。

4

我最近需要做这件事情。 Boost.Python做我们正在寻找(和更多),但个人(尽可能多的我喜欢Boost)我觉得有点矫枉过正,必须拖动Boost库的一半来获得一个功能。 SWIG对我来说也不是一种真正的选择,因为代码生成在类结构变化时总是会变得很难维持(不要误解我的意思,这些都是BRILLIANT解决方案!,而不是我所期待的)。

所以,留给我的唯一的事情就是从基本原理(Python的/ C API)实现它。 Hense,“ECS:Python”诞生了。 ECS:Python(嵌入式C++脚本与Python)是一个专门为C++开发人员设计的简单C++ Python包装库。它允许您将C++应用程序中的对象展示给嵌入式Python解释器以进行交互式脚本编写,而且它非常轻量且易于使用。

其自由(BSD)和开源的。如果你有兴趣在这里它是: http://sourceforge.net/projects/ecspython

+0

欢迎来到堆栈。 –

+0

谢谢Miguel-F :) –