我正在使用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++中使用它?

最佳答案

使用 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();
    }
    ...

07-28 07:56