Как добавить пользовательский флаг в магические команды IPython? (.ipy файлы)

Можно ли добавить собственный флаг в магическую команду IPython? Чтобы быть более конкретным, я хочу использовать команду%run с самодельным флагом:

%run script.ipy --flag "option"

и иметь возможность использовать "параметр" внутри скрипта.

Для файлов.py ответ приведен здесь: Аргументы командной строки в Python

1 ответ

Решение

Как указано в комментариях, этот вопрос касается не только обработки аргументов командной строки в скрипте Python. Речь идет об обработке их в .ipy файл запускается через %run,

Если я создам test.ipy как

import sys
print(sys.argv)

и запустить его из оболочки, я вижу аргументы командной строки:

1223:~/mypy$ python3 test.ipy -test foo
['test.ipy', '-test', 'foo']

но из ipython сессия, я не

In [464]: %run test.ipy --flag test
['/usr/bin/ipython3']

Если я сделаю копию с py название

In [468]: %run testipy.py --flag test
['testipy.py', '--flag', 'test']

Итак %run ...ipy ведет себя по-разному. Это ipython проблема, а не общая командная строка Python.

================

%run у документа есть этот пункт:

Существует одно специальное применение, к которому приведенный выше текст неприменим: если имя файла заканчивается на.ipy[nb], файл запускается как скрипт ipython, так же, как если бы команды были написаны в приглашении IPython.

В этом случае test.ipy сценарий видит то же самое sys.argv как я делаю, когда я печатаю:

In [475]: sys.argv
Out[475]: ['/usr/bin/ipython3']

Так что, если я изменю sys.argv в текущем сеансе, например, добавив пару строк:

In [476]: sys.argv += ['--flag','test']

In [477]: sys.argv
Out[477]: ['/usr/bin/ipython3', '--flag', 'test']

In [479]: %run test.ipy
['/usr/bin/ipython3', '--flag', 'test']

мой ipy Сценарий теперь видит их.

Вот и ответ - поместите аргументы командной строки в sys.argv до использования %run ...ipy,

(Я сделал этот вид возиться с sys.argv при выполнении сложных вещей с argparse.)

Больше ipython магия

In [480]: %run??

показывает мне и документ, и код. Таким образом, я могу видеть, как это лечит .ipy файл спец. Так как это так легко найти, я воздержусь от копирования здесь.

Есть другое решение - не пытайтесь использовать стиль кодирования командной строки с ipy файлы.

Если я добавлю

print(x)

строка этого тестового файла, и иметь x определенный в моей сессии Ipython, я вижу, что печать. Но я положил этот же отпечаток в .pyЯ получу Nameerror, Когда они говорят ipy запускается так, как будто это напечатано, они имеют в виду это. Работает ipy по сути, является альтернативой %paste из буфера обмена.

Другие вопросы по тегам