通过boost python从python中提取常量值

时间:2014-05-09 06:14:44

标签: python c++ boost

python的代码(工作)

import ldap,ldif

l = ldap.initialize('ldaps://RIO-PC:636')
l.set_option(ldap.OPT_TIMEOUT);

我想提取ldap.OPT_TIMEOUT的常量值,但是如何?

#include <iostream>

#include <boost/python.hpp>

int main()
{
    namespace bp = boost::python;
    try{
        Py_Initialize();
        bp::object main_module = bp::import("__main__");
        bp::import("ldap");
        bp::import("ldif");
        bp::object main_namespace = main_module.attr("__dict__");

        bp::exec("import ldap,ldif\n"
                 "l = ldap.initialize('ldaps://RIO-PC')\n",
             main_namespace);

        boost::python::object ldap = boost::python::extract<boost::python::object>(main_namespace["l"]);
        ldap.attr("OPT_TIMEOUT"); //this line will throw exception
    }catch(boost::python::error_already_set const &){               
        PyErr_Print();
        PyErr_Clear();
    }
}

错误消息是

AttributeError:SimpleLDAPObject没有属性&#39; OPT_TIMEOUT&#39;

环境

编译器:vc2008 提升版:1.55_0 os:win7 64bits(x64)

1 个答案:

答案 0 :(得分:1)

您的C ++代码正在尝试提取l.OPT_TIMEOUT,而不是ldap.OPT_TIMEOUT。尝试

    bp::object ldap_module = bp::import("ldap");
    ldap_module.attr("OPT_TIMEOUT");