Как встроить интерпретатор IPython в приложение, работающее в консоли Qy IPython

Есть несколько тем на эту тему, но ни одна из них не дает удовлетворительного ответа.

У меня есть приложение python, запущенное в консоли IPython qt

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

Когда я сталкиваюсь с ошибкой, я хотел бы иметь возможность взаимодействовать с кодом на этом этапе.

    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)  

Я думаю, что это будет работать, но я получаю ошибку:

RuntimeError: потоки могут быть запущены только один раз

2 ответа

Я просто использую это:

from IPython import embed; embed()

у меня работает лучше всего на свете:)

Вы можете следовать следующему рецепту для встраивания сессии IPython в вашу программу:

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)

Тогда используйте ipshell() всякий раз, когда вы хотите попасть в оболочку IPython. Это позволит вам встраивать (и даже вкладывать) интерпретаторы IPython в ваш код и проверять объекты или состояние программы.

Другие вопросы по тегам