Как интегрировать 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.