cpython (3.2): Refine FAQ entry for catching stdout

http://hg.python.org/cpython/rev/c82492fc9943 changeset: 73839:c82492fc9943 branch: 3.2 user: Antoine Pitrou <solipsis@pitrou.net> date: Sat Dec 03 22:35:31 2011 +0100 summary: Refine FAQ entry for catching stdout files: Doc/faq/extending.rst | 21 +++++++++++++++------ 1 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Doc/faq/extending.rst b/Doc/faq/extending.rst --- a/Doc/faq/extending.rst +++ b/Doc/faq/extending.rst @@ -142,21 +142,30 @@ 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! - >>> class StdoutCatcher: +A custom object to do the same would look like this:: + + >>> 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! -- Repository URL: http://hg.python.org/cpython
participants (1)
-
antoine.pitrou