我想从c ++代码中调用Python的pickling例程(dumps
和loads
)。它们是否在官方API中公开?我目前正在通过c ++中的boost :: python调用那些,可能正在寻找一种更简单的方法。
答案 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导入机制在这里更容易。