Padraig, thats kinda what i figured. Pity. Michael, yes, for what I'm doing now, thats actually perfect. I was hoping to be able to use this to add other things to my menu too, besides pdb. Luckily I only need pdb for what I'm working on right now, so I'll worry about it when I actually need it.
Thanks. 2009/1/5 Padraig Kitterick <[email protected]>: > > Daniel Kersten wrote: >> My code is something like this: >> >> while not_done: >> try: >> code() >> except keyboardinterupt: >> print "Menu:" >> print " debug - run pdb" >> print " resume - resume program" >> print " abort - abort program" >> ... >> command = raw_input("> ") >> if command == "debug": >> pdb.set_trace() >> ... >> >> The idea is that code() is run in a loop executing data (in my case, a >> single entry to a log file) and Ctrl-C pauses the program and pops up >> a little menu. The problem is that in certain cases, code() may have >> already altered data and breaking out and rerunning it will either 1) >> lose data or 2) duplicate data. >> >> The only real solution I can think of is catching the interrupt in a >> separate thread which sets a flag telling the main thread to run pdb, >> or abort or whatever, but ideally, I'd like to catch the exception and >> somehow magically resume. >> >> >> 2009/1/5 Ajurna <[email protected]>: >> >>> hi, >>> it might be me and im getting this wrong but surely you could use a try: >>> except clause? >>> >>> try: >>> codeloop() >>> except keyboardinterupt: >>> mainloop() >>> >>> >>> or something to that effect. >>> >>> On Mon, Jan 5, 2009 at 3:38 PM, Daniel Kersten <[email protected]> wrote: >>> >>>> Hi & happy new year, >>>> >>>> I'm wondering if theres anyway of resuming after a KeyboardInterrupt >>>> exception, if I catch it. For example, can I retrieve the code object >>>> or stack or something from when execution was interrupted and continue >>>> from there. >>>> >>>> Basically, I would like to use Ctrl-C as a way to temporarily break >>>> out of my program to enter a menu (in this particular case, the menu >>>> allows you to quit, continue and enter pdb). This works fine in most >>>> cases, but if I interrupt in the middle of certain operations, when I >>>> resume, I lose data. Of course, I can write my code to avoid this, but >>>> that may not always be possible. >>>> >>>> Any ideas? Or do I need to handle the menu in a separate thread..? >>>> >>>> Thanks! >>>> Dan. >>>> >>>> -- >>>> Daniel Kersten. >>>> Leveraging dynamic paradigms since the synergies of 1985. >>>> >>>> >>>> >>> >>> -- >>> ~Ajurna >>> >>> >> >> >> >> > AFAIK this isn't really possible to do in Python [1], as it doesn't have > the ability to restart after an exception is raised, such as is possible > in LISP [2]. You can try to constantly store the current state of all > objects to implement a support for a kind of resume, but that would mean > altering any code extensively. > > [1] http://mail.python.org/pipermail/python-list/2005-June/327048.html > [2] > http://www.gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html > > > > -- Daniel Kersten. Leveraging dynamic paradigms since the synergies of 1985. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Python Ireland" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.ie/group/pythonireland?hl=en -~----------~----~----~----~------~----~------~--~---
