ubelt.util_stream module¶
Functions for capturing and redirecting IO streams.
The CaptureStdout captures all text sent to stdout and optionally prevents it from actually reaching stdout.
The TeeStringIO does the same thing but for arbitrary streams. It is how the former is implemented.
-
class
ubelt.util_stream.
TeeStringIO
(redirect=None)[source]¶ Bases:
_io.StringIO
An IO object that writes to itself and another IO stream.
Variables: redirect (io.IOBase) – The other stream to write to. Example
>>> redirect = io.StringIO() >>> self = TeeStringIO(redirect)
-
isatty
()[source]¶ Returns true of the redirect is a terminal.
Notes
Needed for IPython.embed to work properly when this class is used to override stdout / stderr.
-
encoding
¶ Gets the encoding of the redirect IO object
- Doctest:
>>> redirect = io.StringIO() >>> assert TeeStringIO(redirect).encoding is None >>> assert TeeStringIO(None).encoding is None >>> assert TeeStringIO(sys.stdout).encoding is sys.stdout.encoding >>> redirect = io.TextIOWrapper(io.StringIO()) >>> assert TeeStringIO(redirect).encoding is redirect.encoding
-
-
class
ubelt.util_stream.
CaptureStream
[source]¶ Bases:
object
Generic class for capturing streaming output from stdout or stderr
-
class
ubelt.util_stream.
CaptureStdout
(supress=True, enabled=True)[source]¶ Bases:
ubelt.util_stream.CaptureStream
Context manager that captures stdout and stores it in an internal stream
Parameters: - supress (bool, default=True) – if True, stdout is not printed while captured
- enabled (bool, default=True) – does nothing if this is False
Example
>>> self = CaptureStdout(supress=True) >>> print('dont capture the table flip (╯°□°)╯︵ ┻━┻') >>> with self: ... text = 'capture the heart ♥' ... print(text) >>> print('dont capture look of disapproval ಠ_ಠ') >>> assert isinstance(self.text, six.text_type) >>> assert self.text == text + '\n', 'failed capture text'
Example
>>> self = CaptureStdout(supress=False) >>> with self: ... print('I am captured and printed in stdout') >>> assert self.text.strip() == 'I am captured and printed in stdout'
Example
>>> self = CaptureStdout(supress=True, enabled=False) >>> with self: ... print('dont capture') >>> assert self.text is None