通过 C API?
Pickling routines accessible through the C API?
我想从 C++ 代码中调用 Python 的 pickling 例程(dumps
和 loads
)。官方有曝光吗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 导入机制在这里更简单。
我想从 C++ 代码中调用 Python 的 pickling 例程(dumps
和 loads
)。官方有曝光吗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 导入机制在这里更简单。