Tôi đang cố gắng tìm hiểu cách sử dụng trình thông dịch Python từ C và tôi gặp sự cố với PyEval_EvalCode
. Về cơ bản, tôi đang viết một hàm C trong một chuỗi mã Python tùy ý, biên dịch nó, thực hiện nó, và sau đó in ra kết quả.API C C: Sử dụng PyEval_EvalCode
Vấn đề là khi tôi in kết quả, tôi luôn nhận được None
, ngay cả khi biểu thức rõ ràng không đánh giá được None
.
Đây là mã (với kiểm tra lỗi và tính tham khảo xóa do rõ ràng):
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);
}
Tôi đã thử gọi chức năng này với "5 + 5"
như đầu vào, và nó hiển thị None
. Tôi có đang sử dụng PyEval_EvalCode
không chính xác không?