как интегрировать ZSH и (я) Python? - PullRequest
11 голосов
/ 10 июня 2009

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

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

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

Ответы [ 2 ]

9 голосов
/ 01 июля 2009

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

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

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

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

stat = os.system (cmd)

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

stat = subprocess.call (CMD, оболочки = True, исполняемым = '/ bin / ЗШ')

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

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

6 голосов
/ 10 июня 2009

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

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

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

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

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

ipy> %magic

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

...