可通过C API访问的酸洗程序?

时间:2015-02-24 10:34:12

标签: python api pickle

我想从c ++代码中调用Python的pickling例程(dumpsloads)。它们是否在官方API中公开?我目前正在通过c ++中的boost :: python调用那些,可能正在寻找一种更简单的方法。

1 个答案:

答案 0 :(得分:0)

您可以通过C API调用任何 Python代码:

static PyObject *module = NULL;
PyObject *pickle;

if (module == NULL &&
    (module = PyImport_ImportModuleNoBlock("pickle")) == NULL)
    return NULL;

现在,您可以将其称为:

pickle = PyObject_CallMethodObjArgs(module,
                                    PyString_AS_STRING("dumps"),
                                    py_object_to_dump,
                                    NULL);

pickle = PyObject_CallMethodObjArgs(module,
                                    PyUnicode_FromString("dumps"),
                                    py_object_to_dump,
                                    NULL);

或者喜欢:

picle = PyObject_CallMethod(module, "dumps", "O", py_object_to_dump);

然后执行错误检查并清理:

if (pickle != NULL) { ... }
Py_XDECREF(pickle);

但是在pickle的情况下,您可以直接使用cPickle functions。唯一的问题是cPickle模块(或Python 3中的_pickle)被静态编译为Python二进制文件,或者需要单独加载。使用Python导入机制在这里更容易。