我一直在摆弄 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/