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 ...@@ -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 just allow the standard traceback mechanism to work. Then, the output will go
wherever your ``write()`` method sends it. 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): ... def __init__(self):
... self.data = '' ... self.data = []
... def write(self, stuff): ... def write(self, stuff):
... self.data = self.data + stuff ... self.data.append(stuff)
... ...
>>> import sys >>> import sys
>>> sys.stdout = StdoutCatcher() >>> sys.stdout = StdoutCatcher()
>>> print('foo') >>> print('foo')
>>> print('hello world!') >>> print('hello world!')
>>> sys.stderr.write(sys.stdout.data) >>> sys.stderr.write(''.join(sys.stdout.data))
foo foo
hello world! 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