Как добавить пользовательский флаг в магические команды 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
из буфера обмена.