在C中为配置文件嵌入Python

2024-09-26 18:14:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将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;
}
<>我从微软VisualC++运行时得到运行时错误,这个消息:

^{pr2}$

我做错什么了?在


Tags: runpytestnewincludetimeexeint
2条回答

在初始化Python引擎之前,要创建2个Python对象。在

还有,那很傻。有很多用于C的JSON解析器

你做错的正是我做错的事。在

您正在初始化您自己的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);

^{pr2}$

您可能还想完全删除globals和{}。在

如果我知道如何访问默认全局参数dict,我将在这里添加注释或编辑。在

编辑:实现PyRun_SimpleStringFlags(Python2.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);
    ...

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

相关问题 更多 >

    热门问题