python -i (interactive environment)

Raymond L. Buvel levub137 at wi.rr.com
Sun Mar 6 14:30:18 EST 2005


I posted the following a while back.  I think this is what you are 
looking for.

This can be done fairly easily by creating a module (lets call it
interactive) with the following code in it.
-----------
import sys,os

def debug_exception(type, value, traceback):
      # Restore redirected standard I/O
      sys.stdin = sys.__stdin__
      sys.stdout = sys.__stdout__
      sys.stderr = sys.__stderr__

      # Kick the interpreter into interactive mode and call the original
      # exception handler.
      os.environ['PYTHONINSPECT'] = '1'
      sys.__excepthook__(type, value, traceback)

sys.excepthook = debug_exception
-----------

Now if you import this module and raise an unhandled exception, you will
be in interactive mode.  In other words, I think the following script
does what you are asking for.

-----------
import interactive

raise RuntimeError('Interactive Mode')
-----------

This also has the advantage that if there are no unhandled exceptions in
your script, the script runs and terminates normally.

Enjoy,
Ray Buvel

Joe wrote:
> Hi Pierre,
> 
> Thanks for the reply, but  I am not on Unix and it even if I was that 
> solution it does not achieve the desired results.
> 
> I want the script to decide whether to fall back to the interactive prompt. 
> You solution makes it ALWAYS fall back to the interactive prompt.
> 
> I want to do something like:
> 
> try:
>     # execute code
> except MyExceptionOccurred, except_msg:
>     # fall to interactive prompt.
> 
> In other words I want to have my program to determine whether the 
> interactive prompt to be displayed or not.
> 
> Thanks!
> 
> 
> "Pierre Barbier de Reuille" <pierre.barbier at cirad.fr> wrote in message 
> news:422b49b5$0$23395$626a14ce at news.free.fr...
> 
>>Very simple is you're on UNIX ...
>>
>>You juste have to put at the beginnin of your file :
>>
>>#!/usr/bin/python -i
>>
>>And it juste does what you want :)
>>
>>Pierre
>>
>>Joe a écrit :
>>
>>>When you run "python -i scriptname.py" after the script completes you 
>>>left at the interactive command prompt.
>>>
>>>Is there a way to have this occur from a running program?
>>>
>>>In other words can I just run scriptname.py (NOT python -i scriptname.py) 
>>>and inside of scriptname.py I decide that I want to fall back to the 
>>>interactive prompt?
>>>
>>>I've searched and so far the only thing I've come up with is to use pdb, 
>>>but that is not exactly the same as the interactive prompt.
>>>
>>>Is there any way to do it that I have missed?
>>>
>>>Thanks. 
> 
> 
> 



More information about the Python-list mailing list