Как интегрировать ZSH и (я) Python?

Я был влюблен в zsh в течение долгого времени, а в последнее время я обнаружил преимущества ipython интерактивный переводчик python сам. Будучи способным к компакт-диску, к ls, бежать или к ! это действительно очень удобно. Но теперь кажется странным иметь такую ​​неуклюжую оболочку в ipython, и мне интересно, как мне лучше интегрировать мой zsh и ipython.

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

Итак, вот мой вопрос: как вы эффективно работаете между вашей оболочкой и вашим командным циклом python? Я упускаю какую-то очевидную интеграционную стратегию? Должен ли я сделать все это в Emacs?

2 ответа

Решение

Я задал этот вопрос в списке Zsh, и этот ответ работал для меня. YMMV.

В genutils.py после строки

если не отладка:

Удалить строку:

stat = os.system (cmd)

Заменить его на:

stat = subprocess.call (cmd, shell = True, исполняемый файл ='/bin/zsh')

Вы видите, проблема в том, что это "!" call использует os.system для запуска, по умолчанию используется manky old /bin/sh .

Как я уже сказал, это сработало для меня, хотя я не уверен, что скрылось за кулисами.

Вы можете запустить команды оболочки, запустив их с восклицательным знаком и записав результат в переменную python. Пример: список каталогов в вашем /tmp каталог:

ipy> import os
ipy> tmplist = !find /tmp
ipy> [dir for dir in tmplist if os.path.isdir(dir)]

Объект list - это специальный объект ipython с несколькими полезными методами. Пример: список файлов, заканчивающихся на .pdf

ipy> tmplist.grep(lambda a: a.endswith('.pdf')) # using a lambda
ipy> tmplist.grep('\.pdf$') # using a regexp

Есть много вещей, которые вы можете сделать, прочитав список магических команд:

ipy> %magic

Смотрите раздел оболочки документации Ipython.

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