通过 C API?

Pickling routines accessible through the C API?

我想从 C++ 代码中调用 Python 的 pickling 例程(dumpsloads)。官方有曝光吗API?我目前正在通过 boost::python 从 C++ 中调用它们,也许正在寻找一种更简单的方法。

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

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 导入机制在这里更简单。