【发布时间】:2012-01-16 05:15:56
【问题描述】:
我是 Python/C API 的新手...我正在尝试向我的 C 程序添加新功能,其中我可以将 python 嵌入其中并同时扩展功能,以便嵌入式解释器可以执行一个脚本将与作为我的 C 程序的一部分编写的扩展 python 模块进行交互。我的 C 程序没有全局变量。我想保持这种方式;同时为了将 C 功能暴露给 python,扩展的 C 函数似乎至少需要访问全局变量来访问程序的状态。我该如何解决这个问题?
例如以下是我打算如何嵌入从 main 调用 PYINTERFACE_Initialize 的位置
void PYINTERFACE_Initialize(State *ptr, FILE *scriptFile, const char* scriptFileName)
{
Py_Initialize();
PyObject *module = Py_InitModule("CInterface", CInterfaceMethods);
if (PyRun_SimpleFileEx(scriptFile, scriptFileName, 1) != 0)
{
printf("PYINTERFACE script execution failed!\n");
}
**//ADD State *ptr TO module**
}
这里是扩展功能:
static PyObject*
CInterface_GetStateInfo(PyObject *self, PyObject *args)
{
const char *printStr;
double stateInfo;
State *ptr;
if(!PyArg_ParseTuple(args, "s", &printStr))
{
return NULL;
}
printf("Received %s\n", printStr);
**//RETRIEVE State *ptr FROM self**
stateInfo = ptr->info;
return Py_BuildValue("d", currentTime);
}
这是传递 State *ptr 的最干净的方法吗?我当然不认为需要将内部状态暴露给 python。我曾考虑过使用胶囊,但胶囊似乎并不打算支持这种行为。
提前致谢! V
【问题讨论】:
标签: python python-c-api