我正在尝试在我的 C 应用程序中嵌入 Python (2.7) 库,并且使用 Python/C API 从 C 调用 Python 代码。我需要调用采用关键字参数的 Python 方法。从语义上讲,我试图在 Python 中实现与以下行等效的效果:
myobject.dosomething('blahdy blah', somearg=True)
通过阅读文档 http://docs.python.org/2/c-api/index.html,我已经设法达到以下目的,但这并没有传递关键字参数:
PyObject_CallMethod(myobject, "dosomething", "s", "blahdy blah");
我对 Python 不是很熟悉,而且我有点陷入困境,因为文档对此并不完全清楚,而且 Google 搜索也没有找到太多有用的信息。我将不胜感激任何帮助。
塔马斯的答案将完成工作,但也会泄漏内存。为避免泄漏,请使用
PyObject *args = Py_BuildValue("(s)", "blahdy blah");
PyObject *keywords = PyDict_New();
PyDict_SetItemString(keywords, "somearg", Py_True);
PyObject *myobject_method = PyObject_GetAttrString(myobject, "do something");
PyObject *result = PyObject_Call(myobject_method, args, keywords);
Py_DECREF(args);
Py_DECREF(keywords);
Py_DECREF(myobject_method);
// Do something with the result
Py_DECREF(result);
当然,如果 Python 代码中存在任何错误或异常,某些 PyObject 将为 NULL,并且您的程序可能会崩溃。检查 NULL 结果和/或使用Py_DECREFX()
可以帮助您避免这种情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)