gpt4 book ai didi

python - 在 C 中嵌入 Python 以获取配置文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:52 27 4
gpt4 key购买 nike

我正在尝试将 python 嵌入到 c 中以将其用于配置:

如果我这样做:

/******************************************************************************
*
* Embeding Python Example
*
* To run:
* gcc -c test.c -o test.o -I"C:/Python25/include"
* gcc -o test.exe test.o -L"C:/Python25/libs" -lpython25
* test.exe
*
******************************************************************************/

#include <Python.h>

int main(int argc, char *argv[])
{
PyObject *run;
PyObject *globals = PyDict_New();
PyObject *locals = PyDict_New();

Py_Initialize();

run = PyRun_String("from time import time,ctime\n"
"print 'Today is',ctime(time())\n"
"test = 5\n"
"print test\n", Py_file_input, globals, locals);


Py_Finalize();
return 0;
}

我从 Microsoft VIsual C++ 运行时收到运行时错误,消息如下:

Exception exceptions.ImportError: '__import__ not found' in 'garbage collection' ignored
Fatal Python error: unexpected exception during garbage collection

我做错了什么?

最佳答案

你做错的正是我做错的。

您正在将自己的 globals 字典初始化为空。这意味着即使像 __import__ 这样的东西也没有为当前范围定义。

在您的简单示例中,您可以替换

run = PyRun_String("from time import time,ctime\n"
"print 'Today is',ctime(time())\n"
"test = 5\n"
"print test\n", Py_file_input, globals, locals);

PyRun_SimpleString("from time import time,ctime\n"
"print 'Today is',ctime(time())\n"
"test = 5\n"
"print test\n");

您可能还想完全删除 globalslocals

如果我发现如何访问默认全局字典,我会在此处添加评论或编辑。

编辑 PyRun_SimpleStringFlags (Python 2.7.3) 的实现如下所示:

int PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
{
PyObject *m, *d, *v;
m = PyImport_AddModule("__main__");
if (m == NULL)
return -1;
d = PyModule_GetDict(m);
v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
...

因此,要获取默认 全局字典,您必须导入__main__ 并获取它的 字典。这将包含所有默认的内置函数等。

关于python - 在 C 中嵌入 Python 以获取配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3976101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com