the python shell window is already executing a command

Seymore4Head Seymore4Head at Hotmail.invalid
Thu Sep 18 03:34:14 CEST 2014


On Wed, 17 Sep 2014 18:56:47 -0400, Terry Reedy <tjreedy at udel.edu>
wrote:

>On 9/17/2014 11:55 AM, Seymore4Head wrote:
>> On Wed, 17 Sep 2014 04:02:16 -0400, Terry Reedy <tjreedy at 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



More information about the Python-list mailing list