IPython run magic: как создать псевдоним для "run -i"?
Я программирую пользовательский интерфейс Python для управления различными инструментами в лаборатории. Если скрипт не запускается в интерактивном режиме, соединение с инструментами теряется в конце скрипта, что может быть очень плохо. Я хочу помочь пользователю "запомнить" интерактивный запуск сценария.
Я думаю о двух возможных способах сделать это. Во-первых, как указано в заголовке, я мог бы сделать псевдоним для run -i
:
%alias_magic lab_run run -i
но это возвращает ошибку:
UsageError: unrecognized arguments: -i
Есть ли способ обойти это?
Кроме того, я мог бы обнаружить внутри скрипта, если -i
флаг был передан и выдает ошибку, если нет. Тем не менее, он не отображается в sys.argv
список:
In [1]: import sys
In [2]: run -i test.py random args
['test.py', 'random', 'args']
Я не могу использовать файлы ipy, потому что мне нужно прочитать% run flags, как объяснено в моем предыдущем вопросе здесь: Как добавить пользовательский флаг в магические команды IPython? (.ipy файлы)
Кто-нибудь видит решение этой проблемы?
2 ответа
Вы можете определить свою собственную магическую функцию и использовать %run -i
в этом:
from IPython.core.magic import register_line_magic
@register_line_magic
def r(line):
get_ipython().magic('run -i ' + line)
del r
РЕДАКТИРОВАТЬ
Как указывает hpaulj magic
устарела. Вот версия с новымrun_line_magic
:
from IPython.core.magic import register_line_magic
@register_line_magic
def r(line):
get_ipython().run_line_magic('run', ' -i ' + line)
del r
Now:
%r
делает так же, как:
%run -i
спасибо @Mike за ваш ответ , он указал мне правильное направление для создания псевдонима клеточной магии
я нашел это
%alias_magic [-l] [-c] [-p PARAMS] name target
, в документах , помогает мне
в моем случае:
%alias_magic --cell py_310 script -p C:\Users\myname\AppData\Local\Programs\Python\Python310\python
выход
Created `%%py_310` as an alias for `%%script C:\Users\myname\AppData\Local\Programs\Python\Python310\python`.
который затем можно использовать как
%%py_310
import sys
print(sys.version_info)
выход
sys.version_info(major=3, minor=10, micro=1, releaselevel='final', serial=0)