Можно ли сказать скрипту Python остановиться в какой-то момент и дать вам руку в интерактивном режиме, например, с ipython? - PullRequest
5 голосов
/ 08 января 2010

Предположим, у меня есть скрипт, который делает много вещей, и не очень хорошо работает где-то ближе к концу. Я хотел бы иметь возможность добавить start_ipython() функцию в этот момент, которая остановит сценарий в этот момент, и позволит мне проверять переменные и так далее с ipython. Как я могу это сделать?

Ответы [ 2 ]

15 голосов
/ 08 января 2010

Обратите внимание, что это изменилось в IPython-0.11. Вместо того, что описано ниже, просто используйте следующий импорт:

from IPython import embed as shell

Ответ ниже работает для версий IPython до 0.11.


В регионе, где вы хотите перейти на ipython, определите это

def start_ipython():
   from IPython.Shell import IPShellEmbed
   shell = IPShellEmbed()
   shell()

и позвоните start_ipython туда, куда хотите зайти в переводчик.

Это приведет вас к переводчику и сохранит locals() на этом этапе.

Если вы хотите обычную оболочку, сделайте это

def start_python():
   import code
   code.interact()

Подробности смотрите в документации по вышеуказанным функциям. Я бы порекомендовал вам попробовать ipython и, если он выдает ImportError, переключиться в обычный режим, чтобы он работал, даже если ipython не установлен.

6 голосов
/ 08 января 2010

Самый простой способ - использовать встроенный отладчик. В тот момент, когда вы хотите остановить выполнение, просто выполните:

import pdb; pdb.set_trace()

и вы попадете в оболочку pdb, которая позволяет вам проверять переменные и изменять их.

Существует также внешний пакет ipdb, который вы можете получить через easy_install, который должен работать так же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...