Я пытаюсь понять, как использовать интерпретатор 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"
в качестве входа, и она отобразила None
. Я неправильно использую PyEval_EvalCode
?