Python C API: использование PyEval_EvalCode

Я пытаюсь понять, как использовать интерпретатор Python из C, и у меня возникают проблемы с PyEval_EvalCode. По сути, я пишу функцию C, которая принимает произвольную строку кода Python, компилирует ее, выполняет и затем выводит результат.

Проблема в том, что когда я распечатываю результат, я всегда получаю None, даже если выражение явно не дает None.

Вот код (для ясности удалены проверка ошибок и подсчет ссылок):

void eval(const char* s)
{
    PyCodeObject* code = (PyCodeObject*) Py_CompileString(s, "test", Py_file_input);
    PyObject* main_module = PyImport_AddModule("__main__");
    PyObject* global_dict = PyModule_GetDict(main_module);
    PyObject* local_dict = PyDict_New();
    PyObject* obj = PyEval_EvalCode(code, global_dict, local_dict);

    PyObject* result = PyObject_Str(obj);
    PyObject_Print(result, stdout, 0);
}

Я попытался вызвать эту функцию с "5 + 5" в качестве входных данных, и она отобразила Нет . Использую ли я PyEval_EvalCode неправильно?

7
задан Channel72 5 March 2012 в 20:28
поделиться