【问题标题】:Exchanging data between Visual C++ and Python在 Visual C++ 和 Python 之间交换数据
【发布时间】:2013-04-04 16:20:00
【问题描述】:

故事是这样的,

我有一个运行车辆模拟器的 Visual C++ 代码。模拟器以矢量形式捕获车辆的状态,并且可以从键盘或手动(通过代码)接收控制输入(例如转向角、踏板)。我的目标是自动化车辆控制,但是,我已经用 Python 实现了控制类。

我想将车辆的状态从 C++ 代码输入到 python 类,在其中完成一些处理。然后,python 类应该输出相应的控制输入,供 C++ 代码接收。

有没有简单的方法来实现这一点?我读过类似的帖子,但我都不清楚。

我想到的一种方法是使用文件,两个类都可以读取和写入文件,从中获取车辆状态和控制输入,但是,这可能会带来繁琐的同步问题!

流水线也是可行的,但看起来很复杂,除非你能提供一个很好的简单解决方案:) :)

底线是,我希望 C++ 类和 python 类在相互交换数据的同时同时运行。

提前致谢!

【问题讨论】:

    标签: c++ python controls pipe


    【解决方案1】:

    如果您需要同时运行两个程序,那么没有简单的方法可以做到这一点,您必须在两个独立的进程之间实现异步通信机制。

    实现此目的的一种方法是使用套接字。这样,如果需要,您的控制器和 C++ 应用程序可以在不同的机器上运行。

    在 C++ 方面,您可以将应用程序建立在 boost::asio 周围,以从 Python 控制应用程序读取消息并发送响应。见:Boost Asio

    python 方面见:Python sockets HowTo

    注意事项:

    boost::python 将允许您从 Python 调用 C++ 和从 C++ 调用 Python。

    SWIG 也可用于包装 C++ 类,以便可以从 Python 中调用它们。

    【讨论】:

    • 嗨,马克,谢谢,你似乎正在接近答案,我的两个程序(C++ 和 python)都在同一台机器上,有没有一种简单的方法来创建异步通信?您提到了套接字,但这可能更复杂,因为它用于驻留在不同机器中的程序。
    • 这两个程序将作为独立的进程运行,每个都有自己的地址空间。这意味着您仅限于标准的进程间通信机制(管道、套接字、共享内存等)。我相信使用套接字是最灵活的选择,因为它将允许您在未来运行不同机器的每个应用程序。还有大量关于如何用 Python 和 C++ 做到这一点的信息,ergo 我相信这也是最简单的方法。
    • 非常感谢标记!猜猜是时候学习实现套接字了:)
    【解决方案2】:

    您可以使用Boost::Python 来包装您的 C++ 代码。

    【讨论】:

      【解决方案3】:

      您可以试试ctypes (see here) 吗?

      要从 C++ 调用 python 中的东西,您可以使用 Python API

      【讨论】:

      • 嗨 xgbi,我不想从 C++ 调用函数。相反,我希望 C++ 类和 Python 类在它们之间交换数据时同时运行。这样C++代码就是模拟器,Python类就是代理!
      • 那么你必须在某个地方提供一个接口。如果不是太难,我会建议某种形式的 REST 接口。 C++ 中有很多微型 http 服务器可以让你这样做。否则,你可以挖Google's Protocol Buffers
      猜你喜欢
      • 2017-09-01
      • 2013-09-05
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多