Sto cercando di capire come utilizzare l'interprete Python da C e ho problemi con PyEval_EvalCode
. Fondamentalmente, sto scrivendo una funzione C che contiene una stringa arbitraria di codice Python, la compila, la esegue e poi stampa il risultato.Python: Utilizzo di PyEval_EvalCode
Il problema è che quando stampo il risultato, ottengo sempre None
, anche se ovviamente l'espressione non viene valutata su None
.
Ecco il codice (con controllo di errore e il conteggio di riferimento rimossi per chiarezza):
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);
}
Ho provato a chiamare questa funzione con "5 + 5"
come ingresso, ed è visualizzato None
. Sto usando PyEval_EvalCode
in modo errato?