This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Mention sys.displayhook in code module docs and the compile builtin docs
Type: behavior Stage: patch review
Components: Documentation Versions: Python 3.11, Python 3.10, Python 3.9
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: docs@python Nosy List: Norman Lorrain, Sergey.Kirpichev, aliles, docs@python, iritkatriel, r.david.murray, santoso.wijaya, tebeka
Priority: normal Keywords: easy, patch

Created on 2011-06-24 23:55 by tebeka, last changed 2022-04-11 14:57 by admin.

Files
File name Uploaded Description Edit
p1346072775.diff aliles, 2012-08-27 13:08 review
Pull Requests
URL Status Linked Edit
PR 26217 open Norman Lorrain, 2021-05-18 20:21
Messages (6)
msg139004 - (view) Author: Miki Tebeka (tebeka) * Date: 2011-06-24 23:55
Currently, code.InteractiveConsole lets your override "write" which is the error stream. Allow overriding of "normal" (stdout) writing as well.
This will enable to spawn interpreters into custom stdin/stdout.

See twisted.manhole for example, very useful.
msg139074 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2011-06-25 14:43
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.
msg139077 - (view) Author: Miki Tebeka (tebeka) * Date: 2011-06-25 14:52
Yeah, I though about using dup2 from stdout/stderr to the socket. However this means I can connect only one client at a time. Which was an issue I was trying to avoid. Didn't think about print statements though ...

Thanks.
msg139097 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2011-06-25 16:23
Well, sys.stdout and sys.stderr don't have to be real file objects.  You could substitute a file-like object (one that implements the methods that get called during the interpretation loop) that does your multiplexing.  That kind of trick is one of the things that makes Python so much fun to work with :)
msg169199 - (view) Author: Aaron Iles (aliles) * Date: 2012-08-27 13:08
I've submitted a patch which adds a section to the code module's documentation on overriding console output. It attempts to catalogue when sys.stderr, sys.excepthook and sys.displayhook are used to print console output.
msg391566 - (view) Author: Irit Katriel (iritkatriel) * (Python committer) Date: 2021-04-22 00:10
The patch for the code module doc needs to be converted into a github PR.

A new patch is needed for the compile builtin documentation: https://docs.python.org/3/library/functions.html#compile
This could be added at the end of the third paragraph, where it says that in 'single' mode non-None results are printed - clarify that sys.displayhook is used for that.

(See these unit tests for examples: https://github.com/python/cpython/blob/09b90a037d18f5d4acdf1b14082e57bda78e85d3/Lib/test/test_sys.py#L26)
History
Date User Action Args
2022-04-11 14:57:19adminsetgithub: 56612
2021-05-18 20:21:10Norman Lorrainsetkeywords: + patch
nosy: + Norman Lorrain

pull_requests: + pull_request24834
stage: needs patch -> patch review
2021-04-26 07:10:37Sergey.Kirpichevsetnosy: + Sergey.Kirpichev
2021-04-22 00:10:36iritkatrielsetversions: + Python 3.9, Python 3.10, Python 3.11, - Python 3.1, Python 2.7, Python 3.3
nosy: + iritkatriel

messages: + msg391566

keywords: + easy, - patch
2012-08-27 13:08:47alilessetfiles: + p1346072775.diff

nosy: + aliles
messages: + msg169199

keywords: + patch
2011-06-25 16:23:20r.david.murraysetmessages: + msg139097
2011-06-25 14:52:57tebekasetmessages: + msg139077
2011-06-25 14:43:28r.david.murraysetassignee: docs@python
type: enhancement -> behavior

components: + Documentation
title: Allow overriding of writing to stdout in code.InteractiveConsole -> Mention sys.displayhook in code module docs and the compile builtin docs
nosy: + r.david.murray, docs@python
versions: + Python 3.1
messages: + msg139074
stage: needs patch
2011-06-25 00:34:34santoso.wijayasetnosy: + santoso.wijaya

versions: + Python 3.3
2011-06-24 23:55:44tebekacreate