Próbuję dowiedzieć się, jak korzystać z interpretera Pythona z C, i mam problem z PyEval_EvalCode
. Zasadniczo piszę funkcję C, która przyjmuje dowolny ciąg kodu Pythona, kompiluje go, wykonuje go, a następnie drukuje wynik.Python C API: Używanie PyEval_EvalCode
Problem polega na tym, że po wydrukowaniu wyniku zawsze otrzymuję None
, nawet jeśli wyrażenie oczywiście nie jest zgodne z None
.
Oto kod (z sprawdzanie błędów i liczenia odniesienia usunięte dla jasności):
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);
}
Próbowałem wywołującego tę funkcję z "5 + 5"
jako wejście, a wyświetlany None
. Czy nieprawidłowo używam PyEval_EvalCode
?