python - 使用 Python/C API 获取解释器中 PyString 的值作为 C 程序中的 CString

标签 python c api get

我一直在摆弄 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__")

这可能吗?

感谢您的帮助。

最佳答案

您需要使用 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);

关于python - 使用 Python/C API 获取解释器中 PyString 的值作为 C 程序中的 CString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13086318/

相关文章:

python - 在函数式编程风格中具有容量限制的子元组中拆分 python 元组

c - 何时使用具有最大值的数组以及何时进行 malloc

c - 基本 C SDL2 程序不能与 TCC 一起工作,但它可以与 GCC (Linux) 一起工作

c - 给定两个绝对路径,如何找到相对路径?

api - 寻找具有良好 API 的 GPS

php - Foursquare api 消费者禁用

javascript - 跨浏览器 JavaScript + DOM 文档

python - 如何给一个命令多个名称?

python - 单例数据库连接

python - 逐渐增加字母表中的字母