diff --git a/IPython/terminal/console/interactiveshell.py b/IPython/terminal/console/interactiveshell.py index f127ab3..dc897bf 100644 --- a/IPython/terminal/console/interactiveshell.py +++ b/IPython/terminal/console/interactiveshell.py @@ -43,6 +43,7 @@ class ZMQTerminalInteractiveShell(TerminalInteractiveShell): """A subclass of TerminalInteractiveShell that uses the 0MQ kernel""" _executing = False _execution_state = Unicode('') + _pending_clearoutput = False kernel_timeout = Float(60, config=True, help="""Timeout for giving up on a kernel (in seconds). @@ -241,13 +242,22 @@ class ZMQTerminalInteractiveShell(TerminalInteractiveShell): self._execution_state = sub_msg["content"]["execution_state"] elif msg_type == 'stream': if sub_msg["content"]["name"] == "stdout": + if self._pending_clearoutput: + print("\r", file=io.stdout, end="") + self._pending_clearoutput = False print(sub_msg["content"]["data"], file=io.stdout, end="") io.stdout.flush() elif sub_msg["content"]["name"] == "stderr" : + if self._pending_clearoutput: + print("\r", file=io.stderr, end="") + self._pending_clearoutput = False print(sub_msg["content"]["data"], file=io.stderr, end="") io.stderr.flush() elif msg_type == 'pyout': + if self._pending_clearoutput: + print("\r", file=io.stdout, end="") + self._pending_clearoutput = False self.execution_count = int(sub_msg["content"]["execution_count"]) format_dict = sub_msg["content"]["data"] self.handle_rich_data(format_dict) @@ -267,6 +277,12 @@ class ZMQTerminalInteractiveShell(TerminalInteractiveShell): if 'text/plain' in data: print(data['text/plain']) + elif msg_type == 'clear_output': + if sub_msg["content"]["wait"]: + self._pending_clearoutput = True + else: + print("\r", file=io.stdout, end="") + _imagemime = { 'image/png': 'png', 'image/jpeg': 'jpeg',