That would be awesome.... thanks for your help! -steve On Jan 16, 2013, at 11:44 PM, Roger Serwy wrote:
> IDLE implicitly runs a script as if you specified "-i" when using regular > python from the command line. Perhaps this behavior needs to be documented. > > For what it's worth, this would make the exitfuncs run on the 3.x series: > > diff -r be8e6b81284e Lib/idlelib/run.py > --- a/Lib/idlelib/run.py Wed Jan 09 19:00:26 2013 +0100 > +++ b/Lib/idlelib/run.py Thu Jan 17 00:41:22 2013 -0600 > @@ -381,6 +381,8 @@ > if jit: > self.rpchandler.interp.open_remote_stack_viewer() > else: > + import atexit > + atexit._run_exitfuncs() > flush_stdout() > > def interrupt_the_server(self): > > > > On 01/16/2013 08:47 PM, Steve Spicklemire wrote: >> So how dumb is this? For what it's worth... it works for me. >> >> -steve >> >> aluminum:idlelib steve$ diff -C3 run_orig.py run_new.py >> *** run_orig.py 2013-01-16 15:31:08.000000000 -0700 >> --- run_new.py 2013-01-16 15:30:47.000000000 -0700 >> *************** >> *** 308,313 **** >> --- 308,316 ---- >> if jit: >> self.rpchandler.interp.open_remote_stack_viewer() >> else: >> + if hasattr(sys,'exitfunc') and sys.exitfunc: >> + sys.exitfunc() >> + >> flush_stdout() >> def interrupt_the_server(self): >> >> >> On Jan 16, 2013, at 9:17 AM, Roger Serwy wrote: >> >>> Hi Steve, >>> >>> IDLE's subprocess never actually exits, so the atexit handler will not be >>> called. Forcing an exit with sys.exit() will be caught and the subprocess >>> will still not exit. >>> >>> I suggest filing a bug at bugs.python.org. >>> >>> - Roger >>> >>> >>> On 01/16/2013 06:50 AM, Steve Spicklemire wrote: >>>> Hello Idle-dev folks, >>>> >>>> I tried this on the python list, with no luck. ;-( >>>> >>>> I hate to bother you with a basic user question, but I'm not sure where >>>> else to go. Is there a better list for this? >>>> >>>> thanks, >>>> -steve >>>> >>>> Begin forwarded message: >>>> >>>>> From: Steve Spicklemire <[email protected]> >>>>> Subject: atexit handler in IDLE? >>>>> Date: January 15, 2013 5:25:34 AM MST >>>>> To: [email protected] >>>>> Cc: Steve Spicklemire <[email protected]> >>>>> >>>>> Hello Pythonistas! >>>>> >>>>> I'm trying to get this program, which works on the command line, to run >>>>> correctly in the IDLE environment: >>>>> >>>>> import atexit >>>>> >>>>> print "This is my program" >>>>> >>>>> def exit_func(): >>>>> print "OK.. that's all folks!" >>>>> >>>>> atexit.register(exit_func) >>>>> >>>>> print "Program is ending..." >>>>> >>>>> >>>>> When I run this on the command line I see: >>>>> >>>>> This is my program >>>>> Program is ending... >>>>> OK.. that's all folks! >>>>> >>>>> When I run this in IDLE I see: >>>>> >>>>> This is my program >>>>> Program is ending... >>>>> >>>>> But the atexit handler is never called. ;-( >>>>> >>>>> I tried to fish through the IDLE source to see how the program is >>>>> actually called, and I decided it looked like it was being invoked with >>>>> with os.spawnv, but I'm not sure why this would defeat the atexit >>>>> handler. Anybody know? I'd like to register such a function in my module, >>>>> but I need it to work in IDLE so that students can easily use it. >>>>> >>>>> thanks! >>>>> -steve >>>>> >>>>> >>>>> >>>> _______________________________________________ >>>> IDLE-dev mailing list >>>> [email protected] >>>> http://mail.python.org/mailman/listinfo/idle-dev >>> _______________________________________________ >>> IDLE-dev mailing list >>> [email protected] >>> http://mail.python.org/mailman/listinfo/idle-dev _______________________________________________ IDLE-dev mailing list [email protected] http://mail.python.org/mailman/listinfo/idle-dev
