Commit d4ddec59 authored by Antoine Pitrou's avatar Antoine Pitrou

Refine FAQ entry for catching stdout

parent 48383bfc
......@@ -142,21 +142,30 @@ this object to :data:`sys.stdout` and :data:`sys.stderr`. Call print_error, or
just allow the standard traceback mechanism to work. Then, the output will go
wherever your ``write()`` method sends it.
The easiest way to do this is to use the StringIO class in the standard library.
The easiest way to do this is to use the :class:`io.StringIO` class::
Sample code and use for catching stdout:
>>> import io, sys
>>> sys.stdout = io.StringIO()
>>> print('foo')
>>> print('hello world!')
>>> sys.stderr.write(sys.stdout.getvalue())
foo
hello world!
A custom object to do the same would look like this::
>>> class StdoutCatcher:
>>> import io, sys
>>> class StdoutCatcher(io.TextIOBase):
... def __init__(self):
... self.data = ''
... self.data = []
... def write(self, stuff):
... self.data = self.data + stuff
... self.data.append(stuff)
...
>>> import sys
>>> sys.stdout = StdoutCatcher()
>>> print('foo')
>>> print('hello world!')
>>> sys.stderr.write(sys.stdout.data)
>>> sys.stderr.write(''.join(sys.stdout.data))
foo
hello world!
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment