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.
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:19 | admin | set | github: 56612 |
| 2021年05月18日 20:21:10 | Norman Lorrain | set | keywords:
+ patch nosy: + Norman Lorrain pull_requests: + pull_request24834 stage: needs patch -> patch review |
| 2021年04月26日 07:10:37 | Sergey.Kirpichev | set | nosy:
+ Sergey.Kirpichev |
| 2021年04月22日 00:10:36 | iritkatriel | set | versions:
+ 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:47 | aliles | set | files:
+ p1346072775.diff nosy: + aliles messages: + msg169199 keywords: + patch |
| 2011年06月25日 16:23:20 | r.david.murray | set | messages: + msg139097 |
| 2011年06月25日 14:52:57 | tebeka | set | messages: + msg139077 |
| 2011年06月25日 14:43:28 | r.david.murray | set | assignee: 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:34 | santoso.wijaya | set | nosy:
+ santoso.wijaya versions: + Python 3.3 |
| 2011年06月24日 23:55:44 | tebeka | create | |