diff options
-rw-r--r-- | lldb/include/lldb/Interpreter/ScriptInterpreterPython.h | 2 | ||||
-rw-r--r-- | lldb/source/Interpreter/ScriptInterpreterPython.cpp | 17 |
2 files changed, 16 insertions, 3 deletions
diff --git a/lldb/include/lldb/Interpreter/ScriptInterpreterPython.h b/lldb/include/lldb/Interpreter/ScriptInterpreterPython.h index 53e6b1f5f9e..f8718d3e9ff 100644 --- a/lldb/include/lldb/Interpreter/ScriptInterpreterPython.h +++ b/lldb/include/lldb/Interpreter/ScriptInterpreterPython.h @@ -252,6 +252,8 @@ private: lldb::InputReaderSP m_embedded_thread_input_reader_sp; FILE *m_dbg_stdout; void *m_new_sysout; // This is a PyObject. + void *m_old_sysout; // This is a PyObject. + void *m_old_syserr; // This is a PyObject. std::string m_dictionary_name; TerminalState m_terminal_state; bool m_session_is_active; diff --git a/lldb/source/Interpreter/ScriptInterpreterPython.cpp b/lldb/source/Interpreter/ScriptInterpreterPython.cpp index c584a819aa7..ccdf7486ca4 100644 --- a/lldb/source/Interpreter/ScriptInterpreterPython.cpp +++ b/lldb/source/Interpreter/ScriptInterpreterPython.cpp @@ -303,6 +303,15 @@ ScriptInterpreterPython::RestoreTerminalState () void ScriptInterpreterPython::LeaveSession () { + PyObject *sysmod = PyImport_AddModule ("sys"); + PyObject *sysdict = PyModule_GetDict (sysmod); + + if (m_new_sysout && sysmod && sysdict) + { + PyDict_SetItemString (sysdict, "stdout", (PyObject*)m_old_sysout); + PyDict_SetItemString (sysdict, "stderr", (PyObject*)m_old_sysout); + } + m_session_is_active = false; } @@ -336,16 +345,18 @@ ScriptInterpreterPython::EnterSession () PyRun_SimpleString (run_string.GetData()); run_string.Clear(); - + PyObject *sysmod = PyImport_AddModule ("sys"); PyObject *sysdict = PyModule_GetDict (sysmod); - + if (m_new_sysout && sysmod && sysdict) { + m_old_sysout = PyDict_GetItemString(sysdict, "stdout"); + m_old_syserr = PyDict_GetItemString(sysdict, "stderr"); PyDict_SetItemString (sysdict, "stdout", (PyObject*)m_new_sysout); PyDict_SetItemString (sysdict, "stderr", (PyObject*)m_new_sysout); } - + if (PyErr_Occurred()) PyErr_Clear (); } |