通过Python脚本调用C++函数

2024-05-13 20:35:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个场景,我在C++类中有一些函数,我希望能够用Python脚本调用它们。假设我有一个函数

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

我希望能够通过自定义Python调用调用它并向它传递参数,例如使用

saySomething("Hello")

作为.py文件,我希望它调用greet函数并将“Hello”作为参数传递。

<>我知道这是一个经过了深入讨论的课题,我在C++中嵌入了Python的研究,我已经成功地使用标准的Python /C API从Python脚本中读取值,并在C++中运行Python中的函数并传递参数,但我似乎无法理解如何实现这个特定的结果。

我看过ctypes和各种包装库,比如boost:python或swig,但我似乎不明白它们能在多大程度上帮助我实现我想要的目标。


Tags: 文件函数py脚本hello参数场景msg
3条回答

可以使用WebField.SnLe()函数,这是SICPY包的一部分,编译和执行C/C++文件,并从Python脚本中获取输出。

我最近正需要做这件事。Boost.Python做了我们想要做的事情(以及更多),但就我个人而言(就像我喜欢Boost一样),我发现为了获得一个特性,不得不将Boost库的一半拖进去有点过头了。SWIG对我来说也不是一个真正的选择,因为当类结构改变时,代码生成总是很难维护(别误会,这些都是很好的解决方案!)!,但不是我想要的。

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

它的免费(BSD)和开源。如果你对这里感兴趣的话: http://sourceforge.net/projects/ecspython

取决于您对哪个版本的Python感兴趣,2.x还是3.x, 阅读2.x3.x的扩展和嵌入Python解释器一章。您只对扩展Python感兴趣,所以请参见1部分。用C或C++ ++强Python提供完整的解释,说明如何实现你需要的,以便能够用Python脚本调用C++中实现的函数。

当然,有很多库和生成器可以让你用Python来包C/C++ API(例如{a3}或SWIG),但是你的情况听起来很简单,为了学习,IMO最好熟悉Python C API。即使您使用这些工具,也必须经常深入了解Python C API,或者至少理解它。

相关问题 更多 >