Параметры командной строки для IPython *scripts*?

Меня часто просят отлаживать скрипты Python, написанные другими. Я хотел бы отправить эти сценарии в IPython, чтобы он попадал в оболочку IPython в момент сбоя сценария.

К сожалению, я не могу найти способ отправить (обязательные) параметры командной строки, требуемые сценариями.

IPython предполагает, что все предназначено для IPython, когда я передаю скрипт и его параметры как:

ipython <script_name> <script_options>

Есть ли решение или обходной путь?


person JS.    schedule 09.11.2010    source источник


Ответы (5)


Я знаю, что есть уже принятое решение, но в самой последней версии ipython это не сработает. Вот вырезка и вставка команды, которую я использую для запуска тестов торнадо с --autoreload

ipython --c="%run test.py --autoreload"

Это использует ipython .11.

person Jon Haddad    schedule 02.12.2011

Простой пример здесь.

script.py

from sys import argv

script, first, second, third = argv

print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third

оболочка:

$ ipython script.py stuff things that
The script is called: ex13.py
Your first variable is: stuff
Your second variable is: things
Your third variable is: that
person Parag Tyagi    schedule 29.12.2015

Многие аспекты поведения IPython можно контролировать с помощью настроек в пользовательских файлах конфигурации IPython, которые обычно находятся в ~/.ipython/. Пользователь может создать несколько профилей, каждый с разными настройками параметров конфигурации. Каждый профиль имеет свои настройки в отдельной папке в папке .ipython. Профиль по умолчанию находится в profile_default, а основной файл для настройки поведения — ipython_config.py. По умолчанию он почти полностью прокомментирован, а строки с комментариями показывают переменные конфигурации и их настройки по умолчанию. Раскомментируйте или вставьте строки, чтобы изменить поведение.

Чтобы изменить поведение IPython в конце выполнения скрипта, используйте:

c.TerminalIPythonApp.force_interact = True

Затем, когда сценарий завершится (или вызовет исключение), IPython продолжит работу и выдаст вам приглашение. Это то же поведение, что и ipython -i.

Я использую этот параметр в своем профиле по умолчанию, потому что я всегда хочу, чтобы IPython вел себя именно так. Если это не ваш случай, вы можете создать профиль с таким поведением, чтобы использовать его только тогда, когда вам нужно такое поведение. Или просто продолжайте использовать (очевидно, недокументированную) опцию -i.

Документация по настройке IPython доступна здесь: Введение в настройку IPython — Документация по IPython с параметром force_interact, описанным здесь: Параметры терминала IPython — документация по IPython.

person Tom Loredo    schedule 01.03.2018

person    schedule
comment
Очень хорошо! К сожалению, при исключении я возвращаюсь в командную строку ОС, а не в приглашение IPython. Предложения? - person JS.; 09.11.2010
comment
Ну, вы можете просто запустить ipython, а затем выполнить %run test.py 1 2 3 4 - person dr jimbob; 09.11.2010
comment
На самом деле добавление -i заставляет его оставаться в оболочке. - person dr jimbob; 09.11.2010
comment
@jimbob Если вы не возражаете, я спрошу, где вы нашли опцию «-i»? Мне не удается найти его ни в «ipython -help», ни в «ipython.scipy.org/doc/stable/html/interactive/reference.html' - person JS.; 09.11.2010
comment
@JS Я нашел это только в man python (не в ipython): -i Когда сценарий передается в качестве первого аргумента или используется параметр -c, войдите в интерактивный режим после выполнения сценария или команды. Он не читает файл $PYTHONSTARTUP. Это может быть полезно для проверки глобальных переменных или трассировки стека, когда скрипт вызывает исключение. Немного расстраивает, что этого не было в man ipython, но я попробовал, и это сработало. - person dr jimbob; 10.11.2010
comment
Предостережение: я запускаю IPython на разных машинах. Некоторые будут работать с вышеуказанным решением, а другие — нет. Все сообщают «ipython -Version» как «0.10». У меня не было времени, чтобы диагностировать, почему это так, но не попадайтесь на это, как я (несколько раз). Если вам не удалось настроить IPython, попробуйте другой. - person JS.; 15.10.2011

person    schedule
comment
Это работает, но я не смог найти это в документах, не могли бы вы указать мне, где это задокументировано? - person Daniel Sokolowski; 29.11.2012
comment
Также, чтобы оставаться в интерактивной оболочке, используйте синтаксис ipython -i -- sometest.py 1 2 3 4. - person Daniel Sokolowski; 29.11.2012
comment
Обратите внимание, что «--» — это функция интерпретатора системной оболочки, а не специфичная для оболочки ipython. - person Antoine Gallix; 03.05.2015
comment
Если вам нравится отлаживать с помощью ipdb, вы можете аналогичным образом использовать ipython --pdb -- somtest.py 1 2 3 4. - person spinup; 21.06.2019