【问题标题】:How to export Boost::Python module to Go如何将 Boost::Python 模块导出到 Go
【发布时间】:2021-04-15 04:38:05
【问题描述】:

我没有工作代码来显示输出。

要求是从 Go 代码中调用这个 python 模块“pylib”。

许多类似的帖子都建议使用 os/exec(在 pythonpath 中声明 .so)来调用 pylib 作为外部进程。

如果是这种情况,如何将 作为参数传递?

对象应该在 Go 中创建为 struct 吗?

    #include <boost/python.hpp>

    #include "Bonjour.hpp"
    
    using namespace boost::python;
    
    BOOST_PYTHON_MODULE(pylib)
    {
        class_< Bonjour >("Bonjour", init<string, object, object, dict>())
          .def("greet", &Bonjour::greet)
          .add_property("msg", &Bonjour::get_msg, &Bonjour::set_msg);
    }

Boost.Python 库在上面的示例中被用作 C++ 代码的包装器,它允许您从 Python 运行 C++ 代码

谁能告诉我如何从 Go 中调用相同的(pylib)?谢谢

【问题讨论】:

  • 您是否正在尝试做类似 CGo 提供给 Go 的东西?如果您拥有的库是 Python,为什么要显示 C++ 代码?这里甚至需要 Python 吗?
  • 实际代码是用 C++ 编写的,并使用 Boost::Python 将 C++ 函数公开给现有的 Python 项目。我现在必须使用将导入 pylib 的 Go 而不是 Python 项目。类似于 CGo 为 Go 提供的东西
  • @Amelia 以golang call python 在谷歌上的热门搜索。另一个明显的选择是删除 python 包装器并直接从 go 调用你的 c++ 代码。

标签: python go boost-python


【解决方案1】:

您不能自动在进程 (Go) 和子进程 (Python) 之间传递结构化数据。

手动通信数据的最简单和最常用的方法是使用标准输入和标准输出。另一种方法是使用命令行参数。

&lt;string, object, object, dict&gt; 不是 Go 中的类型。因此,您必须编写大量管道来完成这项工作。

我能想到的最直观的方法是将一个固定的模型序列化为 JSON,然后在 Python 中反序列化。一旦解析了具有该模型的 Python 对象,您就可以使用它的成员作为似乎是 C++ 对象的构造函数的参数。已回答的 Stack Overflow 问题中应提供执行这些操作的详细信息。

【讨论】:

  • 谢谢泰勒。让我根据您的建议搜索资料。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多