R. David Murray <[email protected]> added the comment:

Well, the code is being executed by an exec call on a code object that was 
compiled with the 'single' flag, which is what causes non-None values to get 
"printed".  The compile docs aren't clear on how "printed" is implemented, but 
the answer is that it calls sys.displayhook.  So the way to control that part 
of the output is to assign your own function to sys.displayhook.  None of this 
is documented, and it should be (it took me a while to figure it out, and I had 
a suspicions about how it worked), so I'm changing this to a documentation bug.

However, you mention in the other ticket that are trying to do the interactive 
interpreter trick through a socket.  For that application I think you want to 
ignore both the write method and sys.displayhook, and instead directly patch 
sys.stdout and sys.stderr. Otherwise you'd also miss output sent to those 
destinations via print statements or writing directly to the sys objects, which 
would confuse the user of your interface since the in the normal interactive 
prompt those show up on the console.

----------
assignee:  -> docs@python
components: +Documentation
nosy: +docs@python, r.david.murray
stage:  -> needs patch
title: Allow overriding of writing to stdout in code.InteractiveConsole -> 
Mention sys.displayhook in code module docs and the compile builtin docs
type: feature request -> behavior
versions: +Python 3.1

_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue12403>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to