def report(self, fileobj=None, indent=0): """ Generates a text report on the differences (if any) between two objects, and either returns it as a string or writes it to a file-like object. Parameters ---------- fileobj : file-like object or None (optional) If `None`, this method returns the report as a string. Otherwise it returns `None` and writes the report to the given file-like object (which must have a `.write()` method at a minimum). indent : int The number of 4 space tabs to indent the report. Returns ------- report : str or None """ return_string = False if fileobj is None: fileobj = StringIO() return_string = True self._fileobj = fileobj self._indent = indent # This is used internally by _writeln self._report() if return_string: return fileobj.getvalue()
class CaptureStdio(object): """ A simple context manager for redirecting stdout and stderr to a StringIO buffer. """ def __init__(self, stdout=True, stderr=True): self.stdout = StringIO() self.stderr = StringIO() def __enter__(self): self._original_stdout = sys.stdout self._original_stderr = sys.stderr sys.stdout = self.stdout sys.stderr = self.stderr return self.stdout, self.stderr def __exit__(self, *args, **kwargs): sys.stdout = self._original_stdout sys.stderr = self._original_stderr self.stdout.close() self.stderr.close()
def __init__(self, stdout=True, stderr=True): self.stdout = StringIO() self.stderr = StringIO()