From e5fc3229aa87bb87c40af228c00206b774867483 Mon Sep 17 00:00:00 2001 From: Kevin Van Brunt Date: Thu, 24 Jan 2019 15:57:26 -0500 Subject: Echoing string data directly to inner_stream instead of inner_stream.buffer to make sure line buffering is respected --- cmd2/utils.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'cmd2/utils.py') diff --git a/cmd2/utils.py b/cmd2/utils.py index a09e8785..ae172fa4 100644 --- a/cmd2/utils.py +++ b/cmd2/utils.py @@ -281,10 +281,7 @@ class StdSim(object): raise TypeError('a bytes-like object is required, not {}'.format(type(b))) self.byte_buf += b if self.echo: - if hasattr(self.inner_stream, 'buffer'): - self.inner_stream.buffer.write(b) - else: - self.inner_stream.write(b.decode(encoding=self.encoding, errors=self.errors)) + self.inner_stream.buffer.write(b) def __init__(self, inner_stream, echo: bool = False, encoding: str='utf-8', errors: str='replace') -> None: @@ -297,6 +294,7 @@ class StdSim(object): """ self.buffer = self.ByteBuf(inner_stream, echo) self.inner_stream = inner_stream + self.echo = echo self.encoding = encoding self.errors = errors @@ -304,8 +302,9 @@ class StdSim(object): """Add str to internal bytes buffer and if echo is True, echo contents to inner stream""" if not isinstance(s, str): raise TypeError('write() argument must be str, not {}'.format(type(s))) - b = s.encode(encoding=self.encoding, errors=self.errors) - self.buffer.write(b) + self.buffer.byte_buf += s.encode(encoding=self.encoding, errors=self.errors) + if self.echo: + self.inner_stream.write(s) def getvalue(self) -> str: """Get the internal contents as a str""" -- cgit v1.2.1