Estoy tratando de encontrar la manera de usar el intérprete de Python de C, y estoy teniendo problemas con PyEval_EvalCode
. Básicamente, estoy escribiendo una función C que toma una cadena arbitraria de código Python, la compila, la ejecuta y luego imprime el resultado.Python C API: Usando PyEval_EvalCode
El problema es que cuando imprimo el resultado, siempre obtengo None
, incluso si la expresión obviamente no se evalúa a None
.
Aquí está el código (con comprobación de errores y el recuento de referencias para mayor claridad):
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);
}
Traté de llamar a esta función con "5 + 5"
como la entrada, y se visualiza None
. ¿Estoy usando PyEval_EvalCode
incorrectamente?