When I run "python -m idlelib.idle -sc [command] from the command line, IDLE runs the startup file, but then pops up an error message saying "the Python Shell window is already executing a command;please wait until it is finished." When the error window is closed, the command executes, unless the main Python Shell has already been closed, in which case a traceback occurs:
Traceback (most recent call last):
File "C:\Python27\lib\runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "C:\Python27\lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "C:\Python27\lib\idlelib\idle.py", line 11, in <module>
idlelib.PyShell.main()
File "C:\Python27\lib\idlelib\PyShell.py", line 1602, in main
shell.interp.execsource(cmd)
AttributeError: 'NoneType' object has no attribute 'execsource'
I confirmed the bug on Win10 with 3.5 and 3.6. "python -m idlelibl -s" prints a prompt*, runs the file and prints any output, and prints a prompt. It then accepts user input. When "-c command" is added, it should accept that as user input (and perhaps display it on the input line). But I get the same error box. When clicked away, 'command' executes and a third prompt is displayed.
*Another bug. The startup file should run first, before a prompt, just as it does in python, and just as with files run with F5. It would not hurt if [Running <path>] were printed, but not a prompt. Prompts should mean 'ready to accept input'. Ditto for -c command, unless IDLE is changed to display the command after the prompt as if typed in.
Warning comes from ModifiedInterpreter (MI).dispaly_executing_dialog, which is called in MI.runcommand if 'self.tkconsole.executing'. MI.runcommand is used for internal startup code and for '-', '-c', and '-r' on the command line, but not for user '>>> ' and editor code.
I confirmed that '-s' + '-' or '-r' give the same warning. Hence the title change.
MI.tkconsole is the PyShell (PS) window instance. PS.executing is set/reset in PS.beginexecuting, PS.endexecuting. The latter should apparently be called someplace it is not now.