4

我一直在搞乱 Python/C API 并拥有以下代码:

#include <Python.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    //Initialize Python
    Py_Initialize();

    //Run file
    FILE *fp = fopen("Test.py", "r");

    PyRun_SimpleFile(fp,"Test.py");

    fclose(fp);

    //Run Python code
    PyRun_SimpleString("print(__NAME__)");
    PyRun_SimpleString("print(__DESC__)");
    PyRun_SimpleString("print(__SKIN__)");
    PyRun_SimpleString("onEnable()");

    //Finalize Python
    Py_Finalize();

    return EXIT_SUCCESS;
}

Test.py 包含以下内容:

__NAME__ = "Frank"
__DESC__ = "I am a test script"
__SKIN__ = "random image"

def onEnable():
    print("In Func")

如您所料,编译和运行 c 程序会导致:

坦率

我是测试脚本

随机图像

在功能

但是,我需要一种从解释器获取 python 字符串的方法,将它们粘贴到 C 字符串中,然后打印它们,而不是使用 PyRun_SimpleString("print(blah)")。

例如:

char *__NAME__;
__NAME__ = Py_GetObject("__NAME__")

这可能吗?

谢谢你的帮助。

4

1 回答 1

5

您需要使用PyString_AsString。我认为它是这样的:

PyObject* module = PyImport_AddModule("__main__");
PyObject* o = PyObject_GetAttrString(module , "__NAME__");
if (PyString_Check(o))
{
    const char* name = PyString_AsString(o);
    // don't delete or modify "name"!
}
Py_DECREF(o);
于 2012-10-26T14:22:57.057 回答