我一直在乱用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;
}
Run Code Online (Sandbox Code Playgroud)
Test.py包含:
__NAME__ = "Frank"
__DESC__ = "I am a test script"
__SKIN__ = "random image"
def onEnable():
print("In Func")
Run Code Online (Sandbox Code Playgroud)
正如您所料,编译和运行c程序会导致:
坦率
我是一个测试脚本
随机图像
在Func
但是,我需要一种方法从解释器获取python字符串,将它们粘贴在C字符串中然后打印它们,而不是使用PyRun_SimpleString("print(blah)").
例如:
char *__NAME__;
__NAME__ = Py_GetObject("__NAME__")
Run Code Online (Sandbox Code Playgroud)
这可能吗?
谢谢你的帮助.
您需要使用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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1472 次 |
| 最近记录: |