2013-03-01 9 views
5

Es gibt ein paar Themen dazu, aber keine mit einer befriedigenden Antwort.Wie integriere ich einen IPython-Interpreter in eine Anwendung, die in einer IPython Qt-Konsole ausgeführt wird

Ich habe eine Python-Anwendung in einer IPython qt-Konsole ausgeführt

http://ipython.org/ipython-doc/dev/interactive/qtconsole.html

Wenn ich einen Fehler stoßen, würde Ich mag mit dem Code zu interagieren können, an diesem Punkt.

try: 
     raise Exception() 
    except Exception as e: 
     try: # use exception trick to pick up the current frame 
      raise None 
     except: 
      frame = sys.exc_info()[2].tb_frame.f_back 
     namespace = frame.f_globals.copy() 
     namespace.update(frame.f_locals) 
     import IPython 
     IPython.embed_kernel(local_ns=namespace) 

Ich denke, würde dies funktionieren würde, aber ich erhalte eine Fehlermeldung:

Runtime: threads nur einmal gestartet

Antwort

4

können Sie the following recipe folgen können eine IPython Sitzung in Ihr Programm einzubetten:

try: 
    get_ipython 
except NameError: 
    banner=exit_msg='' 
else: 
    banner = '*** Nested interpreter ***' 
    exit_msg = '*** Back in main IPython ***' 

# First import the embed function 
from IPython.frontend.terminal.embed import InteractiveShellEmbed 
# Now create the IPython shell instance. Put ipshell() anywhere in your code 
# where you want it to open. 
ipshell = InteractiveShellEmbed(banner1=banner, exit_msg=exit_msg) 

Verwenden Sie dann ipshell(), wann immer Sie in eine IPython-Shell fallen möchten. Dadurch können Sie IPython-Interpreter in Ihren Code einbetten (und sogar verschachteln) und Objekte oder den Status des Programms überprüfen.

23

ich dies nur verwenden:

from IPython import embed; embed() 

funktioniert besser als alles andere für mich :)

+0

ich diese Liebe mit neuen Projekten zu erkunden. Ich habe eine bit.ly URL j.mp/ipshell erstellt, die ich in meinen Code einrollen kann. Es zeigt auf https://gist.github.com/RichardBronosky/570492 –

Verwandte Themen