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++

Selenium Python 检查变量值是不是不为空。我得到 False 但有一个价值

python C API 是不是与 C++ 完全兼容?

具有递归的 Python C API - 段错误

Python C Api 和正确处理 C++ 类中的内存

python 变量传到C++变量中如何传值 举例说明