2013-03-01 24 views
5

Có một vài chủ đề về điều này, nhưng không có chủ đề nào có câu trả lời thỏa đáng.Làm cách nào để nhúng Trình thông dịch IPython vào một ứng dụng đang chạy trong Bàn điều khiển Qt IPython

Tôi có một ứng dụng python chạy trong một IPython console qt

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

Khi tôi gặp phải một lỗi, tôi muốn để có thể tương tác với mã tại điểm đó.

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) 

Tôi nghĩ rằng điều này sẽ làm việc, nhưng tôi nhận được một lỗi:

RuntimeError: đề chỉ có thể được bắt đầu một lần

Trả lời

4

Bạn có thể làm theo the following recipe để nhúng một phiên IPython vào chương trình của bạn:

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) 

Sau đó, sử dụng ipshell() bất cứ khi nào bạn muốn được thả vào vỏ IPython. Điều này sẽ cho phép bạn nhúng (và thậm chí làm tổ) các trình thông dịch IPython trong mã của bạn và kiểm tra các đối tượng hoặc trạng thái của chương trình.

23

tôi chỉ sử dụng này:

from IPython import embed; embed() 

hoạt động tốt hơn so với bất cứ điều gì khác cho tôi :)

+0

Tôi thích sử dụng này để khám phá các dự án mới. Tôi đã tạo một bit.ly URL j.mp/ipshell mà tôi có thể cuộn tròn vào mã của mình. Nó trỏ đến https://gist.github.com/RichardBronosky/570492 –

Các vấn đề liên quan