IPython Поддерживать пространство имен после запуска - программирование
Подтвердить что ты не робот

IPython Поддерживать пространство имен после запуска

Я пытался повсюду искать простой способ восстановить функциональность, подобную MATLAB: когда я запускаю script, я хочу, чтобы ipython поддерживал пространство имен моих функций.

У меня есть основная функция, а затем у меня есть функция sim_loop(), у которой есть код, который я пытаюсь отлаживать. sim_loop() имеет большой массив, который я хочу отображать после запуска script. Я не могу заставить эту функциональность работать (я предполагаю, что это "интерактивное пространство имен" ).

У меня есть pdb, но если я выйду из pdb и хочу проверить переменную, я должен снова запустить все это (не говоря уже о том, что нет автозаполнения и других функций). Я включил оболочку IPython в свой script, но, опять же, это не касается моей проблемы, потому что я хочу многократно выполнять script снова и снова и постоянно проверять переменную внутри моей второй функции (не main()).

Чтобы уточнить Я хочу иметь доступ к области подпрограммы моего script после запуска script из ipython.

то есть: я запускаю ipython. Затем я набираю "run script.py". Он работает и работает отлично. Я хочу иметь возможность затем проверить переменную "dummy", которая была в пределах области: main- > sim_loop- > dummy

Я хочу проверить его, а затем снова запустить script с помощью "run script.py", а затем снова проверить "dummy" ad nauseum.

4b9b3361

Ответ 1

Чтобы запустить script в основном пространстве имен ipython:

ipython script.py

Конечно, это просто работает и выходит. Если вы хотите запустить script в основном пространстве имен ipython, а затем перейдите в REPL:

ipython -i script.py

Если вы уже используете ipython и хотите запустить script в существующем основном пространстве имен ipython:

%run -i script.py

Вам может потребоваться добавить другие параметры, например, если ваш script явно вызывает sys.exit в любом месте, вам, вероятно, нужен параметр -e.

Если вы просто хотите импортировать все имена в пространство имен без запуска "активного" кода, вы можете сделать %run -n -i script.py, если script выполняет тест if __name__ == '__main__'.

Конечно, даже без ipython вы можете execfile('script.py') с почти точно таким же эффектом, который вы ищете (за исключением некоторых странных взаимодействий с местными жителями и не работающих в 3.x). Или даже from script import * может быть достаточно близко.

Ответ 2

То, что вы, по-видимому, хотите, - это разбить область действия для целей dev, сделав locals на глобальные переменные, что может и не быть лучшей идеей.

Как альтернатива, вы знаете о ipdb?