gpt4 book ai didi

Python C API : Using PyEval_EvalCode

转载 作者:太空狗 更新时间:2023-10-29 21:35:20 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何从 C 语言使用 Python 解释器,但我在使用 PyEval_EvalCode 时遇到了问题。基本上,我正在编写一个 C 函数,它接收任意 Python 代码字符串、编译它、执行它,然后打印出结果。

问题是,当我打印出结果时,我总是得到 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

最佳答案

如果你想计算一个表达式,你需要使用 Py_eval_input 作为 Py_CompileString 的参数。

我对此事的理解是:

  • Py_eval_input 等同于内置的 eval -- 它计算一个表达式。
  • Py_file_input 等同于 exec -- 它执行 Python 代码,但不返回任何内容。
  • Py_single_input 计算一个表达式并打印它的值 -- 在解释器中使用。

参见 here更多信息,但有关此主题的文档很薄弱。

关于Python C API : Using PyEval_EvalCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9573422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com