Как встроить интерпретатор 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 в ваш код и проверять объекты или состояние программы.