From f1d3efc2fba704692d539acc3cb0376a1dd9d98f Mon Sep 17 00:00:00 2001
From: Terry Jan Reedy
If IDLE quits with no message, and it was not started from a console, try
starting from a console (python -m idlelib)
and see if a message appears.
With rare exceptions, the result of executing Python code with IDLE is
-intended to be the same as executing the same code in a console window.
+intended to be the same as executing the same code by the default method,
+directly with Python in a text-mode system console or terminal window.
However, the different interface and operation occasionally affect
-visible results. For instance, sys.modules
starts with more entries.
IDLE also replaces sys.stdin
, sys.stdout
, and sys.stderr
with
-objects that get input from and send output to the Shell window.
-When Shell has the focus, it controls the keyboard and screen. This is
+visible results. For instance, sys.modules
starts with more entries,
+and threading.activeCount()
returns 2 instead of 1.
By default, IDLE runs user code in a separate OS process rather than in
+the user interface process that runs the shell and editor. In the execution
+process, it replaces sys.stdin
, sys.stdout
, and sys.stderr
+with objects that get input from and send output to the Shell window.
+The original values stored in sys.__stdin__
, sys.__stdout__
, and
+sys.__stderr__
are not touched, but may be None
.
When Shell has the focus, it controls the keyboard and screen. This is
normally transparent, but functions that directly access the keyboard
-and screen will not work. If sys
is reset with importlib.reload(sys)
,
-IDLE’s changes are lost and things like input
, raw_input
, and
-print
will not work correctly.
With IDLE’s Shell, one enters, edits, and recalls complete statements.
-Some consoles only work with a single physical line at a time. IDLE uses
-exec
to run each statement. As a result, '__builtins__'
is always
-defined for each statement.
IDLE’s standard stream replacements are not inherited by subprocesses
+created in the execution process, whether directly by user code or by modules
+such as multiprocessing. If such subprocess use input
from sys.stdin
+or print
or write
to sys.stdout or sys.stderr,
+IDLE should be started in a command line window. The secondary subprocess
+will then be attached to that window for input and output.
If sys
is reset by user code, such as with importlib.reload(sys)
,
+IDLE’s changes are lost and input from the keyboard and output to the screen
+will not work correctly.