From bfbbb8a750c99b1be8ea843dbaf16e0a9672286a Mon Sep 17 00:00:00 2001 From: Elizaveta Shashkova Date: Mon, 4 Dec 2017 14:43:02 +0300 Subject: [PATCH] No interactive output from IPython console (PY-26479) Do not patch sys.stdout to postpone banner showing, just call an appropriate function before execution of greeting message. --- .../_pydev_bundle/pydev_console_utils.py | 1 - .../_pydev_bundle/pydev_ipython_console.py | 19 +++++++------------ .../pydev_ipython_console_011.py | 14 ++++++-------- python/helpers/pydev/pydevconsole.py | 2 +- 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/python/helpers/pydev/_pydev_bundle/pydev_console_utils.py b/python/helpers/pydev/_pydev_bundle/pydev_console_utils.py index 759c37cfb8b1..47b3e23892cd 100644 --- a/python/helpers/pydev/_pydev_bundle/pydev_console_utils.py +++ b/python/helpers/pydev/_pydev_bundle/pydev_console_utils.py @@ -184,7 +184,6 @@ class BaseInterpreterInterface: self.exec_queue = _queue.Queue(0) self.buffer = None self.banner_shown = False - self.default_banner = '' def build_banner(self): return 'print({0})\n'.format(repr(self.get_greeting_msg())) diff --git a/python/helpers/pydev/_pydev_bundle/pydev_ipython_console.py b/python/helpers/pydev/_pydev_bundle/pydev_ipython_console.py index 13a32c1648b3..fd4580b2e828 100644 --- a/python/helpers/pydev/_pydev_bundle/pydev_ipython_console.py +++ b/python/helpers/pydev/_pydev_bundle/pydev_ipython_console.py @@ -4,7 +4,6 @@ import sys from _pydev_bundle.pydev_console_utils import BaseInterpreterInterface from _pydev_bundle.pydev_ipython_console_011 import get_pydev_frontend from _pydevd_bundle.pydevd_constants import dict_iter_items -from _pydevd_bundle.pydevd_io import IOBuf # Uncomment to force PyDev standard shell. @@ -18,25 +17,21 @@ class InterpreterInterface(BaseInterpreterInterface): The methods in this class should be registered in the xml-rpc server. ''' - def __init__(self, host, client_port, mainThread, show_banner=True): - BaseInterpreterInterface.__init__(self, mainThread) + def __init__(self, host, client_port, main_thread, show_banner=True): + BaseInterpreterInterface.__init__(self, main_thread) self.client_port = client_port self.host = host - - # Wrap output to handle IPython's banner and show it in appropriate time - original_stdout = sys.stdout - sys.stdout = IOBuf() - self.interpreter = get_pydev_frontend(host, client_port, show_banner=show_banner) - self.default_banner = sys.stdout.getvalue() - sys.stdout = original_stdout - + self.interpreter = get_pydev_frontend(host, client_port) self._input_error_printed = False self.notification_succeeded = False self.notification_tries = 0 self.notification_max_tries = 3 + self.show_banner = show_banner def get_greeting_msg(self): - return self.interpreter.get_greeting_msg() + "\n" + self.default_banner + if self.show_banner: + self.interpreter.show_banner() + return self.interpreter.get_greeting_msg() def do_add_exec(self, code_fragment): self.notify_about_magic() diff --git a/python/helpers/pydev/_pydev_bundle/pydev_ipython_console_011.py b/python/helpers/pydev/_pydev_bundle/pydev_ipython_console_011.py index 93695cd1f9f1..98001cd5ced9 100644 --- a/python/helpers/pydev/_pydev_bundle/pydev_ipython_console_011.py +++ b/python/helpers/pydev/_pydev_bundle/pydev_ipython_console_011.py @@ -318,21 +318,18 @@ class _PyDevFrontEnd: version = release.__version__ - def __init__(self, show_banner=True): + def __init__(self): # Create and initialize our IPython instance. if hasattr(PyDevTerminalInteractiveShell, '_instance') and PyDevTerminalInteractiveShell._instance is not None: self.ipython = PyDevTerminalInteractiveShell._instance else: self.ipython = PyDevTerminalInteractiveShell.instance() - if show_banner: - # Display the IPython banner, this has version info and - # help info - self.ipython.show_banner() - self._curr_exec_line = 0 self._curr_exec_lines = [] + def show_banner(self): + self.ipython.show_banner() def update(self, globals, locals): ns = self.ipython.user_ns @@ -491,9 +488,10 @@ class _PyDevFrontEndContainer: _instance = None _last_host_port = None -def get_pydev_frontend(pydev_host, pydev_client_port, show_banner=True): + +def get_pydev_frontend(pydev_host, pydev_client_port): if _PyDevFrontEndContainer._instance is None: - _PyDevFrontEndContainer._instance = _PyDevFrontEnd(show_banner=show_banner) + _PyDevFrontEndContainer._instance = _PyDevFrontEnd() if _PyDevFrontEndContainer._last_host_port != (pydev_host, pydev_client_port): _PyDevFrontEndContainer._last_host_port = pydev_host, pydev_client_port diff --git a/python/helpers/pydev/pydevconsole.py b/python/helpers/pydev/pydevconsole.py index d81a8019db25..13126fc9440e 100644 --- a/python/helpers/pydev/pydevconsole.py +++ b/python/helpers/pydev/pydevconsole.py @@ -89,7 +89,7 @@ class InterpreterInterface(BaseInterpreterInterface): The methods in this class should be registered in the xml-rpc server. ''' - def __init__(self, host, client_port, mainThread, show_banner=True): + def __init__(self, host, client_port, mainThread): BaseInterpreterInterface.__init__(self, mainThread) self.client_port = client_port self.host = host