##// END OF EJS Templates
Merging -r 1198 from lp:ipython.
Merging -r 1198 from lp:ipython.

File last commit:

r1472:dddf1831
r2152:e6fe2e2c merge
Show More
output_trap.py
107 lines | 2.6 KiB | text/x-python | PythonLexer
Brian E Granger
This is a manual merge of certain things in the ipython1-dev branch, revision 46, into the main ...
r1234 # encoding: utf-8
""" Trap stdout/stderr."""
__docformat__ = "restructuredtext en"
#-------------------------------------------------------------------------------
# Copyright (C) 2008 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# Imports
#-------------------------------------------------------------------------------
import sys
from cStringIO import StringIO
class OutputTrap(object):
""" Object which can trap text sent to stdout and stderr.
"""
Gael Varoquaux
Modified OutputTrap to accept a file-like object and use it instead of...
r1407 def __init__(self, out=None, err=None):
Brian E Granger
This is a manual merge of certain things in the ipython1-dev branch, revision 46, into the main ...
r1234 # Filelike objects to store stdout/stderr text.
Gael Varoquaux
Modified OutputTrap to accept a file-like object and use it instead of...
r1407 if out is None:
self.out = StringIO()
else:
self.out = out
if err is None:
self.err = StringIO()
else:
self.err = err
Brian E Granger
This is a manual merge of certain things in the ipython1-dev branch, revision 46, into the main ...
r1234
# Boolean to check if the stdout/stderr hook is set.
self.out_set = False
self.err_set = False
@property
def out_text(self):
""" Return the text currently in the stdout buffer.
"""
return self.out.getvalue()
@property
def err_text(self):
""" Return the text currently in the stderr buffer.
"""
return self.err.getvalue()
def set(self):
""" Set the hooks.
"""
if sys.stdout is not self.out:
self._out_save = sys.stdout
sys.stdout = self.out
self.out_set = True
if sys.stderr is not self.err:
self._err_save = sys.stderr
sys.stderr = self.err
self.err_set = True
def unset(self):
""" Remove the hooks.
"""
Gael Varoquaux
Isolate the displayhook created by ipython0. This fixes a test not...
r1472 if self.out_set:
sys.stdout = self._out_save
Brian E Granger
This is a manual merge of certain things in the ipython1-dev branch, revision 46, into the main ...
r1234 self.out_set = False
Gael Varoquaux
Isolate the displayhook created by ipython0. This fixes a test not...
r1472 if self.err_set:
sys.stderr = self._err_save
Brian E Granger
This is a manual merge of certain things in the ipython1-dev branch, revision 46, into the main ...
r1234 self.err_set = False
def clear(self):
""" Clear out the buffers.
"""
Gael Varoquaux
Modified OutputTrap to accept a file-like object and use it instead of...
r1407 self.out.reset()
self.out.truncate()
Brian E Granger
This is a manual merge of certain things in the ipython1-dev branch, revision 46, into the main ...
r1234
Gael Varoquaux
Modified OutputTrap to accept a file-like object and use it instead of...
r1407 self.err.reset()
self.err.truncate()
Brian E Granger
This is a manual merge of certain things in the ipython1-dev branch, revision 46, into the main ...
r1234
def add_to_message(self, message):
""" Add the text from stdout and stderr to the message from the
interpreter to its listeners.
Parameters
----------
message : dict
"""
out_text = self.out_text
if out_text:
message['stdout'] = out_text
err_text = self.err_text
if err_text:
message['stderr'] = err_text