On Wed, 17 Sep 2014 18:56:47 -0400, Terry Reedy <tjre...@udel.edu> wrote:
>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. Sorry. I don't speak python yet. Quite a few of the above terms are new to me. It may be that was trying to run the program again before the current one was finished. In the past I was getting the error when I was (almost) sure the program had finished. I will be more careful in the future, but I will also keep an eye out for the problem to repeat. I just tried to run the above program again and gave it more time to finish and I did not get the error, so it could well be I was jumping the gun. Thanks -- https://mail.python.org/mailman/listinfo/python-list