使用python扩展C++应用程序

问题描述:

我有一个用C++编写的遗留(但仍然是内部维护的)应用程序,它处理一些硬件,与数据库交互,通过串行线路或套接字接收命令...总之,它不重要工作量。使用python扩展C++应用程序

此应用程序在Linux(ARM/Buildroot)下运行。

现在需要修改添加RESTful API的控件界面。

我正在探索通过Python扩展来做到这一点的可能性。

注意我是一名C++/java程序员,我不擅长Python,但我知道基础知识。

总体思路是:

  • 启动Python解释器作为C++应用程序的线程。
  • 使用Flask/jinja2(或者简单的Bottle)来处理传入的RESTful请求。
  • 向Python展示一些(可能只是一个)C++类。
  • 从Python调用相应的C++方法来执行所需的操作。

我学的官方文档(主要是关于纯C)和几个备选方案,其中包括:

问题是:

  • 这是否任何意义?
  • 什么是实现这一目标的最不具侵入性的方式(如果有的话)?
  • 哪些lib/framework被建议使用?
  • 是否有一些教程项目沿着这些线?

我知道这个问题相当广泛,但我希望只要第一条评论指向正确的方向就可以缩小它。

+0

真的需要在应用程序中嵌入REST API吗?如果你已经有了基于套接字的控制接口,为什么不让REST API使用它(并且作为一个独立的应用程序)? –

+0

@DanMašek:当前的控制界面非常有限,不包括数据库设置,必须手动完成。报告功能也相当有限。我打算直接在Python中实现一些数据库访问设施,并为功能查询提供更好的响应。基本上我们正在探索进一步增强当前应用程序的可能性,以保持现有的(或多或少)并增加主要在Python中的新功能。进一步的开发将是将现有的功能从C++移植到Python并放弃传统接口(远景!)。 – ZioByte

你能否以相反的方式实现它 - 在Python程序中嵌入C++代码?通过这种方式,它可以像您所说的那样为现有的Python功能做更多的准备。 (使用Python包装器),进程/线程管理等进行通信......保持C++只是需要的东西在C++中,就像处理硬件,C/C++ - 只有库,CPU重的代码一样。

看看Cython用于在Python中嵌入C++。 Cython基本上是一种从类Python语言到.c /的编译器。“just”调用Python C API的cpp文件,所以它可以从“普通”Python代码中使用,但也可以调用其他C/C++代码。

备选方案:在C++应用程序中实现API并创建一个使用此API的单独Python应用程序。通过API我不是指REST API,而是更低级的东西 - RPC,ZeroMQ,普通套接字...