【发布时间】:2016-09-30 21:07:39
【问题描述】:
我有一个用 C++ 编写的遗留(但仍在内部维护)应用程序,它处理一些硬件、与数据库交互、通过串行线路或套接字接收命令......总之,它完成了大量的工作。
此应用程序在 Linux (ARM/Buildroot) 下运行。
现在需要改进控制接口,添加一个 RESTful API。
我正在探索通过 Python 扩展实现此目的的可能性。
请注意,我是一名 C++/java 程序员,我并不真正精通 Python,但我知道基础知识。
一般的想法是:
- 在 C++ 应用程序中将 Python 解释器作为线程启动。
- 使用 Flask/jinja2(或简单的 Bottle)来处理传入的 RESTful 请求。
- 向 Python 公开几个(可能只有一个)C++ 类。
- 从 Python 调用适当的 C++ 方法来执行所需的操作。
我研究了官方文档(主要是关于纯 C 的)和几个替代方案,包括:
- Boost.Python(对于我们有限的硬件来说可能太重了)
- pybind11(似乎只关心扩展 Python,而不是嵌入它)。
- http://www.codeproject.com/Articles/11805/Embedding-Python-in-C-C-Part-I(仅处理嵌入,不让 Python 访问 C++ 类)。
问题是:
- 这有意义吗?
- 实现此目的的侵入性最小的方式(如果有)是什么?
- 建议使用哪个库/框架?
- 是否有一些类似的教程项目?
我知道这个问题很宽泛,但我希望在第一批 cmets 指出我正确的方向后尽快缩小范围。
【问题讨论】:
-
真的需要在应用程序中嵌入 REST API 吗?如果您已经拥有基于套接字的控制接口,为什么不让 REST API 使用它(并作为一个独立的应用程序)?
-
@DanMašek:当前的控制界面非常有限,不包括数据库设置,必须手动完成。报告能力也相当有限。我计划直接在 Python 中实现一些数据库访问工具,并更好地响应功能查询。基本上,我们正在探索进一步增强当前应用程序的可能性,以保持现有的(或多或少)原样并主要在 Python 中添加新功能。进一步的发展是将现有功能从 C++ 转移到 Python 并丢弃遗留接口(遥远的未来!)。
标签: python c++ extending python-embedding