我正在用 C++ 编写 Python 终端 GUI。我正在使用以下代码运行用户键入的 Python 命令行:
void RunTerminalCommand (char * line)
{
PyObject *py_main, *py_dict;
py_main = PyImport_AddModule("__main__");
py_dict = PyModule_GetDict(py_main);
PyObject * PyRes = PyRun_String(line, Py_single_input, py_dict, py_dict);
return 0;
}
它工作得很好,命令行被执行,结果通过标准输出打印在输出窗口上。但是每当 Python 命令行导致 Python 错误时,它就会停止工作:我的标准输出没有收到任何数据
笔记:
PyRes 总是返回 NULL,甚至在错误行被注入之前
我不知道我是否应该每次都调用 PyImport_AddModule。但它似乎以这种方式工作。
如果我使用PyRun_SimpleString(line) insted of PyRun_String(line, Py_single_input, py_dict, py_dict),它总是有效的,我仍然通过 stdout/stderr 收到错误消息。但是这个调用不会将命令行评估的结果发送到标准输出,所以我不想使用它。例如,当我使用 PyRun_String 时,命令行“2+2”将在标准输出上打印“4”,但在我使用 PyRun_SimpleString 时不会。