我正在用C++編寫Python終端GUI。我使用以下代碼來運行用戶鍵入的Python命令行:PyRun_String在發生任何錯誤後停止向stdout發送結果
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;
}
它工作得非常好,與正在執行的命令行和正在打印的stdout經由在輸出窗口上的結果。但每當Python的命令行導致Python的錯誤,它停止工作:我的標準輸出沒有接收到任何數據
注:
柴堆總是返回NULL,錯誤行注入
甚至在我不知道我是否應該每次調用PyImport_AddModule。但它似乎以這種方式工作。
如果我使用PyRun_SimpleString(線) insted的PyRun_String(線,Py_single_input,py_dict,py_dict)的,它總是工作,我仍然可以通過標準輸出/標準錯誤的錯誤消息。但是這個調用不會將命令行評估的結果發送到標準輸出,所以我不想使用它。例如,當我使用PyRun_String時,命令行「2 + 2」將在stdout上打印「4」,但在使用PyRun_SimpleString時不會。
我沒有發佈完整的代碼,所以這可能導致你認爲我沒有檢查PyRun_String的返回。我做了,它總是返回NULL,正如我在問題中所說的那樣。但抱歉沒有發佈完整的代碼。我嘗試簡化問題並將其縮小到更少的代碼行。 – Alex