2013-03-01 11 views
5

Jest kilka tematów na ten temat, ale żaden z zadowalającą odpowiedzią.Jak osadzić interpretera IPython w aplikacji działającej w konsoli IPython Qt

Mam aplikacji python działa w ipython qt konsoli

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

Kiedy wystąpi błąd, chciałbym być w stanie współdziałać z kodem w tym punkcie.

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) 

bym, że to będzie działać, ale pojawia się błąd:

RuntimeError: nici można uruchomić tylko raz

Odpowiedz

4

Możesz śledzić the following recipe osadzić sesję ipython do swojego programu:

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) 

Następnie należy użyć ipshell(), gdy chcesz zostać przeniesiony do powłoki IPython. Umożliwi to osadzenie (a nawet zagnieżdżenie) interpreterów IPython w kodzie i sprawdzenie obiektów lub stanu programu.

23

po prostu użyć tego:

from IPython import embed; embed() 

działa lepiej niż cokolwiek innego dla mnie :)

+0

Uwielbiam używać tego do odkrywania nowych projektów. Stworzyłem bit.ly URL j.mp/ipshell, który mogę zwinąć w moim kodzie. Wskazuje na https://gist.github.com/RichardBronosky/570492 –

Powiązane problemy