Python C/API 分配一个 C++ 变量
Posted
技术标签:
【中文标题】Python C/API 分配一个 C++ 变量【英文标题】:Python C/API assign a C++ variable 【发布时间】:2014-01-06 11:00:59 【问题描述】:我正在用 Python C/API 编写一个小程序,它基本上调用了一个简单的 Python 脚本。代码如下:
#include <Python.h>
PyObject *pName, *pModule, *pDict, *pFunc;
int main()
Py_Initialize();
pName = PyString_FromString("simplemodule");
pModule = PyImport_Import(pName);
pDict = PyModule_GetDict(pModule);
pFunc = PyDict_GetItemString(pDict, "simplefunction");
if(PyCallable_Check(pFunc))
PyObject_CallObject(pFunc, NULL);
else
PyErr_Print();
Py_DECREF(pName);
Py_DECREF(pModule);
Py_Finalize();
return 0;
现在,这里是 simplemodule.py 的代码:
def simplefunction():
m = 5*5
return m
我的问题是:如何将变量 m 分配给 C++ 变量,以便在 C++ 中使用它?
【问题讨论】:
【参考方案1】:使用PyInt_AsLong
将返回值转换为C long。
...
if (PyCallable_Check(pFunc))
PyObject *res = PyObject_CallObject(pFunc, NULL);
if (res != NULL)
long n = PyInt_AsLong(res); // <---------
cout << n << endl;
else
PyErr_Print();
...
【讨论】:
谢谢!它完美地工作。如果模块函数返回一个字符串,我应该使用PyString_AsString
之类的东西吗?
@jndok,是的,使用PyString_AsString
。顺便说一句,它返回 char *
,而不是 C++ string
。以上是关于Python C/API 分配一个 C++ 变量的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Python/C API 将 Python 实例传递给 C++