当前位置: 首页 > 面试题库 >

从C ++调用Python函数

郏兴贤
2023-03-14
问题内容

我正在尝试从C ++实现调用Python函数。我以为可以通过函数指针来实现,但是似乎不可能。我一直在使用boost.python以完成此任务。

假设在Python中定义了一个函数:

def callback(arg1, arg2):
    #do something
    return something

现在,我需要将此函数传递给C ,以便可以从那里调用它。如何在C 端编写代码boost.python以实现此目的?


问题答案:

如果可以使用任何名称:

将其传递给需要一个的函数boost::python::object

bp::object pycb; //global variable. could also store it in a map, etc
void register_callback(bp::object cb)
{
      pycb = cb;
}

如果它在具有相同名称的单个已知名称空间中:

bp::object pycb = bp::scope("namespace").attr("callback");

bp::objectoperator()定义,因此您可以像调用任何函数一样调用它

ret = pycb()


 类似资料:
  • 问题内容: 构建与C或C ++库的Python绑定的最快方法是什么? (如果这很重要,我正在使用Windows。) 问题答案: Boost Python库是用于连接Python和C 的框架。它使您可以快速而无缝地将C 类的函数和对象暴露给Python,反之亦然,而无需使用特殊工具-仅使用C 编译器即可。它被设计为以非介入方式包装C 接口,因此您不必为了包装而完全更改C ++代码,从而使Boost.

  • 问题内容: 我正在尝试创建一个用Go语言编写的静态对象,以与C程序(例如内核模块等)进行接口。 我已经找到了有关从Go调用C函数的文档,但是关于如何走另一条路却找不到很多。我发现这是可能的,但很复杂。 这是我发现的: 有关C和Go之间的回调的博客文章 CGO文档 Golang邮件列表帖子 有任何人对此有经验吗?简而言之,我正在尝试创建一个完全用Go编写的PAM模块。 问题答案: 您可以从C调用Go

  • 问题内容: 我有一个C函数,我想从C 调用。我无法使用“ ”这样的方法,因为C函数无法使用g 进行编译。但是使用gcc可以很好地编译。有什么想法如何从C ++调用函数吗? 问题答案: 像这样编译C代码: 然后是这样的C ++代码: 然后使用C ++链接器将它们链接在一起: 当您包含C函数的声明时,还必须告诉C ++编译器C头即将到来。因此开始于: 应该包含以下内容: (在此示例中,我使用了gcc,

  • 问题内容: 我有很多用C语言编写的函数,我希望我用Python编写的一些代码能够访问这些函数。 我已经在这里阅读了几个类似问题的问题,但是我对我应该采用哪种方法感到困惑。 一个问题建议使用ctypes,另一个问题建议使用cython。我已经阅读了两者的文档,但对于哪个对我来说更好,我还是一无所知。 基本上,我已经编写了一些Python代码来进行二维FFT,我希望C代码能够看到该结果,然后通过编写的

  • 问题内容: 我正在开发Python / ObjC应用程序,需要从ObjC的Python类中调用一些方法。我已经尝试了几种方法,但都没有成功。 如何从Objective-C调用Python方法? 我的Python类正在Interface Builder中实例化。如何从该实例调用方法? 问题答案: 使用PyObjC。 它包含在Leopard及更高版本中。 它甚至可以与iPython一起使用: ` 要从

  • 问题内容: 我试图从我的JavaScript代码中调用Python中的函数。我使用了此处说明的代码,但对我不起作用。 这是我的JS代码: Python代码: 你知道这是怎么回事吗? 问题答案: 除了上述要点之外,并假设您已经具有适当的设置来服务您的python脚本并返回响应。您应该提交一个异步请求,尤其是在python代码进行大量计算的情况下。 如果您只进行少量计算,而使用从jQuery 1.8开