Как я могу получить файл для автозапуска, прежде чем я выполню какую-либо команду в ipython? - PullRequest
3 голосов
/ 23 апреля 2011

У меня есть файл Python, в котором хранится множество функций, которые я постоянно изменяю, а затем тестирую в ipython. Мой текущий рабочий процесс заключается в запуске «% run myfile.py» перед каждой командой. Однако в идеале я бы хотел, чтобы это произошло автоматически. Это возможно?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2011

Если вы действительно хотите использовать для этого rlwrap, напишите фильтр!Просто определите input_handler, который добавляет %run myfile.py к входу, и echo_handler, чтобы повторить ваш исходный ввод, чтобы вы не увидели, что это происходит (man RlwrapFilter расскажет вам все, что вы когда-либо хотели знать о записи фильтра,а потом немного).

Но разве не элегантнее решить это в самом ipython, используя IPython.hooks.pre_runcode_hook?

import os
import IPython
ip = IPython.ipapi.get()

def runMyFile(self):
    ip.magic('%run myFile.py')
    raise IPython.ipapi.TryNext()

ip.set_hook('pre_runcode_hook', runMyFile)
2 голосов
/ 23 апреля 2011

Я не могу найти элегантный способ. Это безобразный способ. Run:

rlwrap awk '{print "%run myfile.py"} {print} {fflush()}' |ipython

Это читает из STDIN, но печатает команду, которую вы хотели перед каждой командой. fflush есть, чтобы отключить буферизацию и немедленно передать вещи в ipython. rlwrap для сохранения привязок readline; вы можете удалить его, если у вас его нет, но это будет менее удобно (без клавиш со стрелками и т.

Имейте в виду, что вам придется набирать команды до появления приглашения ipython. Могут быть и другие более раздражающие вещи, которые ломаются, я не проверял полностью.

...