On 9/17/2014 11:55 AM, Seymore4Head wrote:
On Wed, 17 Sep 2014 04:02:16 -0400, Terry Reedy <tjre...@udel.edu>
wrote:
On 9/16/2014 10:17 PM, Seymore4Head wrote:
What I do is click on the IDLE window and without making any changes I
just hit f5 to rerun the program.
Sometimes I get the error "the python shell window is already
executing a command" and sometimes not.
You left out an important part of the error message ""please wait until
it is finished."
I am using XP and Python 3.4.1.
I am using 3.4.1 on Win 7.
Is there a way to rerun a program without getting this error?
Follow the instruction you were given, but omitted, or see below.
Normally, hitting f5 kills the previous process if it is still running
and starts the one in the editor. Please post a minimal program that
exhibits the problem.
It happens in almost every program I have written. I just tried this
one again. I could run the program by pushing f5. The first couple
of times it would run again by switching back to IDLE and pressing f5,
but after the second or third time, it gives an error that the python
shell window is already executing a command.
If I make a change to the program, like adding or deleting a 0 from
"rounds" the program will run without generating an error, but if I
try to re run the program without changing anything, I get the error
almost every time.
Here is one.
import random
count =0
rounds=1000
heads=0
tails=0
ht=[0,1]
while count<rounds:
coin=random.choice(ht)
if coin == 0:
heads=heads+1
elif coin == 1:
tails=tails+1
count = count + 1
print (heads,tails)
print ('Heads {:.2%} Tails "{:.2%} "'.format(heads/rounds,
tails/rounds))
I am unable to reproduce the problem. When I run this program from an
Idle editor, it finished before I can click on the Editor window and hit
F5 again. The same remains true with 1 or 2 zeros added. With 1000000
rounds, I get the expected behavior, which is no ouput from the
cancelled process and a clean restart.
A little digging with Idle's grep (Find in Files) shows that the message
is produced by this code in idlelib/PyShell.py, about 825.
def display_executing_dialog(self):
tkMessageBox.showerror(
"Already executing",
"The Python Shell window is already executing a command; "
"please wait until it is finished.",
master=self.tkconsole.text)
This function is only called here (about line 735)
def runcommand(self, code):
"Run the code without invoking the debugger"
# The code better not raise an exception!
if self.tkconsole.executing:
self.display_executing_dialog()
<else run idle code in user process output view user>
How is this run? Run-Module F5 invokes
ScriptBinding.run_module_event(116) and thence _run_module_event (129).
This methods includes this.
if PyShell.use_subprocess:
interp.restart_subprocess(with_cwd=False)
restart_subprocess includes these lines (starting at 470):
# Kill subprocess, spawn a new one, accept connection.
self.rpcclt.close()
self.terminate_subprocess()
console = self.tkconsole
...
console.executing = False # == self.tkconsole
...
self.transfer_path(with_cwd=with_cwd)
transfer_path calls runcommand but only after tkconsole.executing has
been set to False. But this only happens if PyShell.use_subprocess is
True, which it normally is, but not if one starts Idle with the -n option.
After conditionally calling interp.restart_subprocess, _run_module_event
directly calls interp.runcommand, which can fail when running with -n.
Are you? This is the only way I know to get the error message. Is so,
the second way to not get the error message is to not use -n and run
normally.
--
Terry Jan Reedy
--
https://mail.python.org/mailman/listinfo/python-list