Ipython QtConsole %edit
При использовании магической функции%edit из QtConsole с IPython вызов не блокируется и не выполняет сохраненный код. Однако он сохраняет временный файл...
Я думаю, что это предполагаемое поведение из-за графического редактора и неопределенности, и какой бы ни была эта причина для неспособности связаться с подпроцессом (pyZMQ?).
Что вы предлагаете как лучший способ смешать%edit/%run magics?
Я не возражаю против вызова двух разных команд (одну для редактирования и одну после того, как я сохраню и выполнение безопасно). Но эти команды нуждаются в способе синхронизации этого целевого местоположения файла или кого-то для сохранения хранилища, и, вероятно, нуждаются в некоторой грубой форме прогнозируемого генерирования имен файлов, чтобы вы могли редактировать более одного файла за раз и выполнять произвольно. Постоянство сессии не является обязательным.
Пишет ли моя собственная магия какую-то пользу Надеюсь, мы сможем%% редактировать макросы в ближайшее время, этого было бы достаточно, чтобы все заработало.
2 ответа
Ты должен быть в состоянии сделать %edit filename.py
а также %run filename.py
, Ожидается неблокирующее поведение, и IIRC по технической причине. Не непреодолимый, но сложный.
Вы можете определить свою магию, если хотите, улучшения приветствуются.
Надеюсь, мы сможем%% редактировать макросы в ближайшее время, этого было бы достаточно, чтобы все заработало.
Для этого тоже пиар приветствуются. Я думаю, что в качестве обходного пути / вариант вы можете %load macro
который поместит макрос на вход n+1, отредактирует его и переопределит, что может быть хорошим расширением для магии клетки %%macro macroname
Если на вашем входе есть исполняемый код (из QtConsole), вы можете набрать
%edit 1-5
Это запускает редактор, создает временный файл (автоматически управляемый) и загружает ваши строки ввода. Этого почти достаточно, теперь как прагматично получить имя этого временного файла?
Я вижу оператор печати на Stdout, но он не виден QtConsole AFAIK. Может быть, перенаправить стандартный вывод, чтобы поймать эту строку, но это не может быть вариант в любом случае, если вы делаете что-то еще с stdout.
Если бы я мог получить полный путь, который был только что создан, это был бы торт. Храните его там, где магия знает, как его найти. Затем, когда все будет готово, введите команду followup, вытолкните имя из стека, загрузите его в макрос и запустите. Все это с двумя входными командами и без имен для запоминания (если только вы не хотите снова найти и использовать этот макрос, но для одного выстрела...)
Как мне перехватить или получить путь к этому временному файлу?