Disable automatic printing in Python interactive session
Question: I am going to be holding a Python workshop to teach some beginner level
programmers at my college Python.

I am looking for a way to modify the default behavior of Python interactive
sessions so that expressions do not automatically print out results. For
example, take this following interactive session:

    
    
    wil@calcifer:~$ python
    Python 2.7.3 (default, Aug  1 2012, 05:16:07)
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> x = 5
    >>> y = 7
    >>> x + y
    12
    >>> first_name = "Test"
    >>> last_name = "Person"
    >>> first_name + last_name
    'TestPerson'
    >>>
    

This would enforce the use of the `print` statement to avoid confusion later
on. This isn't crucial, but I was surprised that I was unable to find any
settings for this anywhere.

I would be able to preconfigure the machine beforehand, so any solutions would
work. Does anyone know if this is possible, or what change to the interactive
sessions creates this effect?


Answer: The expression printing in interactive sessions is mediated via a call to
`sys.displayhook`. Just override it to a NOP:

    
    
    >>> import sys
    >>> sys.displayhook = lambda x: None
    
    >>> 2 + 3
    >>> print 2 + 3
    5
    >>> 
    

In a plain Python session it is wired to sys.stdout. Applications that offer a
Python shell on a GUI are expcted to use it to print the expression values
back to the user.

You can write your pythonrc.py ( ~/.pythonrc.py file) to do this by default,
each time the interpreter is called. Further documentation on sys.displayhook
can be found here: <http://docs.python.org/3/library/sys.html#sys.displayhook>

