Skip to content
Open
26 changes: 26 additions & 0 deletions Doc/library/code.rst
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,32 @@ build applications which provide an interactive interpreter prompt.
raises :exc:`OverflowError` or :exc:`ValueError` if the command contains an
invalid literal.

Overriding Console Output
-------------------------

The output for :class:`InteractiveConsole` and :class:`InteractiveInterpreter`
is written using one of :data:`sys.stderr`, :func:`sys.displayhook`
or :func:`sys.excepthook`. Which output mechanism is used depends on the
reason for producing output:

* The return value from successfully interpreted Python statements are printed
by calling :func:`sys.displayhook`. This is a side effect of
:func:`compile_command` passing ``'single'`` for *symbol*.
* If the default :func:`sys.excepthook` has not been replaced, syntax errors
and exception tracebacks are printed by calling the
:meth:`write <io.TextIOBase.write>` method on :data:`sys.stderr`.
* If :func:`sys.excepthook` has been replaced with a user defined function
:func:`sys.excepthook` is called to handle printing of exception tracebacks
and syntax errors.

Additionally, :class:`InteractiveConsole` will print banner information to
:data:`sys.stderr` if *banner* was passed to the constructor.

To customize the console output a user should replace :func:`sys.displayhook`
and :func:`sys.excepthook` with custom implementations. Alternatively, users
can replace the :meth:`InteractiveConsole.write` method on a subclass
instead of replacing :func:`sys.excepthook` to control the printing of errors.


.. _interpreter-objects:

Expand Down
5 changes: 3 additions & 2 deletions Doc/library/functions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -288,8 +288,9 @@ are always available. They are listed here in alphabetical order.
The *mode* argument specifies what kind of code must be compiled; it can be
``'exec'`` if *source* consists of a sequence of statements, ``'eval'`` if it
consists of a single expression, or ``'single'`` if it consists of a single
interactive statement (in the latter case, expression statements that
evaluate to something other than ``None`` will be printed).
interactive statement. In the latter case, expression statements that
evaluate to something other than ``None`` will be printed using
:func:`sys.displayhook`.

The optional arguments *flags* and *dont_inherit* control which
:ref:`compiler options <ast-compiler-flags>` should be activated
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Update to documentation.