Я относительно плохо знаком с Python, но имею немного опыта с помощью IDL. Я задавался вопросом, знает ли кто-либо, существуют ли эквивалентные команды в Python для остановки IDL и команды .reset.
Если я запускаю некоторый скрипт IDL, я записал, что вставил команду остановки, по существу что он делает остановить сценарий там и предоставить мне доступ к командной строке посреди сценария. Таким образом, у меня есть доступ ко всем функциям и переменным, которые я определил перед командой остановки, которую я нахожу действительно полезными для отладки.
.reset управляют, чтобы я нашел чрезвычайно полезными также. То, что это делает, сбрасывается среда IDL (очищает все переменные, функции, и т.д.). Это - как будто я закрыл тот сеанс и открыл новый, но не имея необходимость выходить и перезапускать IDL. Я нахожу, что, если я пытаюсь отладить сценарий, я записал, что полезно иногда запуститься с нуля и не иметь для сброса IDL (или Python теперь). Было бы полезно также в Python смочь не импортировать любые модули, которые я ранее импортировал.
Любая справка с этими проблемами значительно ценилась бы.
Удачи
Вы, вероятно, просто хотите использовать отладчик Python для этого.
стоп
звучит эквивалентно использованию кода
модуля. .reset
не имеет эквивалента на Python, за исключением безвозмездного использования del
.
Добро пожаловать в сообщество Python! Я все еще учиюсь, но приятнее Imo Python, чем интерактивный язык данных.
В любом случае, ответ Игнасио о использовании модуля кода выглядит так, будто он может предоставить то, что вы хотите, по крайней мере, насколько параллельно остановке IDL.
Другое, что вы можете найти полезной, - это перейти в интерактивный режим Python и импортировать вашу программу. Затем вы можете взаимодействовать с ним под управлением функциями и т. Д. (По общему признанию, я не специалист по этому поводу.) Если вы это сделаете, вам понадобится основная () функция в файле, которая управляет программой. Например, у вас будет что-то вроде:
import sys
def main():
# do stuff
return(0)
if __name__ == '__main__':
sys.exit(main())
вместо всего лишь:
# do stuff
Это предотвращает выполнение программы при вытянув ее в переводчик Python. Для получения дополнительной, см. статья Гвидо о главных функциях .
IPython (помимо того, что REPL намного лучше, чем стандартный интерпретатор Python) может делать то, что вы хотите:
from IPython.Shell import IPShellEmbed
start_shell = IPShellEmbed()
def times_2(x):
return 2*x
a = 5
start_shell()
# now in IPython shell
# a -> 5
# times_2(a) -> 10
Обратите внимание, что любые изменения, внесенные в оболочку , не будут отправлены обратно в основной процесс Python при выходе - если вы установите = 10 в IPython (используя приведенный выше пример), a по-прежнему равно 5 в основном процессе Python.
править: сообщение в списке рассылки пользователей IPython , где я впервые увидел эту технику.
Используйте pdb, как в этом коротком скрипте. Запустите его из командной строки, и волшебным образом появится приглашение PDB, позволяющее выполнять пошаговое выполнение, оценку произвольных выражений и т. Д.
#!/usr/bin/env python
import pdb;
print 1
print 2
pdb.set_trace()
print 3
print 4