CからPythonインタープリターを使用する方法を理解しようとしていますが、に問題がありPyEval_EvalCode
ます。基本的には、Pythonコードの任意の文字列を取り込んでコンパイルし、実行して、結果を出力するC関数を作成しています。
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
間違って使用していますか?