Irv Kalb <i...@furrypants.com> added the comment:

I have tried the test that Terry outlined (from double clicking on the IDLE 
icon), and I can confirm that I get the exact same results.  In the menu bar, I 
see just the Apple icon and "IDLE".  The items in the IDLE menu work (About 
IDLE and Preferences).  At that point, I have to force quit.

I found the pyshell.py file and the line that you suggested changing.  I can 
make the change but when I go to save, I get a permissions error and cannot 
save the file.

Irv

> On Jul 27, 2020, at 7:44 PM, Terry J. Reedy <rep...@bugs.python.org> wrote:
> 
> 
> Terry J. Reedy <tjre...@udel.edu> added the comment:
> 
> Simpler test.
> 
> Open IDLE Shell (only) from icon or (preferably) terminal.
>>>> input()
>   # Close IDLE without giving input with Window (X), File => exit, or 
> Control/Command-Q.
> Click OK in "Your program is still running" box (from PyShell)
> 
> On Windows, IDLE closes apparently cleanly, but Task Manager shows that (at 
> least usually) the IDLE process moves from Apps to Background processes, with 
> label 'Python x.y.z Shell', where it remains as an inaccessible 20 mb zombie 
> until [End Task]ed.  This is not normal.
> 
> On macOS Mohave, the Shell window and IDLE part of the top menubar disappear, 
> but the Apple part remains with the apple and program name entry ("IDLE" or 
> "Python" depending on whether started from icon or Terminal).  I presume this 
> is the equivalent of Python becoming a background process, except that Apple 
> keeps a visible link to it.  If I start IDLE in Terminal with trailing &, 
> there are initially two processes, and the first remains along with the Apple 
> menu.
> 
> Under the IDLE/Python menu item, About and Preferences still bring up the 
> corresponding dialogs, which worked as far as I tested.  This confirms that 
> the IDLE process is still alive. A couple of times, Quit (Command-Q) worked 
> to quit/crash python, and Segmentation Fault appeared in Terminal once.  
> Later, Quit did not work and I had to use (apple)=> Force Quit.
> 
> The trivial solution is to not close with input pending.  First, either hit 
> Enter to let the user code run or end-of-file (default ^D) to kill it.  A 
> corresponding patch could enforce this with a message to enter or kill before 
> closing.
> 
> However, I believe the issue is that PyShell.readline uses a nested tk 
> mainloop() as a control mechanism.  Four callbacks, including eof_callback, 
> call quit() to exit the nested mainloop and finish readline.  But the 
> callback has to finish and be pulled off the stack first.  Three of the 
> callbacks return immediately after 'quit()'.  However, PyShell.close 
> continues closing before readline continues.
> 
> When I replaced pyshell line  1016
>        return EditorWindow.close(self)
> with
>        root.after(1, EditorWindow.close self)
> the bug disappears.  The opens a time gap between PyShell.close and 
> EditorWindow.close that allows readline to return '', signalling end-of-file.
> 
> This change also works on my Mac, except that I have to say 'yes' twice to 
> close.
> Irv, please try this replacement on your system.
> 
> ----------
> title: At prompt for input(), pressing Command q kills IDLE -> IDLE: exit at 
> input() prompt is not complete
> 
> _______________________________________
> Python tracker <rep...@bugs.python.org>
> <https://bugs.python.org/issue41413>
> _______________________________________
>

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue41413>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to