Я любил zsh
в течение долгого времени, и позже я обнаруживал преимущества ipython
интерактивный интерпретатор python
самостоятельно. Способность к CD, к ls, для выполнения или к! действительно очень удобно. Но теперь чувствует себя странным иметь такую неуклюжую оболочку, когда в ipython, и интересно, как я мог интегрировать свой zsh и свой ipython лучше.
Конечно, я мог переписать свой .zshrc и все свои сценарии в Python, и эмулировать большую часть моего мира оболочки от ipython, но он не чувствует себя хорошо. И я, очевидно, не готов использовать ipython в качестве основной оболочки так или иначе.
Так, здесь прибывает мой вопрос: как Вы работаете эффективно между Вашей оболочкой и Вашим циклом команды Python? Я пропускаю некоторую очевидную стратегию интеграции? Я должен сделать все это в emacs?
Я задал этот вопрос в списке zsh, и этот ответ у меня сработал. YMMV.
В genutils.py после строки
, если не выполняется отладка:
Удалите строку:
stat = os.system (cmd)
Замените ее на:
stat = subprocess.call (cmd, shell = True, executable = '/ 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)]
Объект списка - это специальный объект ipython с несколькими полезными методами. Пример: список файлов, оканчивающихся на .pdf
ipy> tmplist.grep(lambda a: a.endswith('.pdf')) # using a lambda
ipy> tmplist.grep('\.pdf$') # using a regexp
. Вы можете многое сделать, прочитав список магических команд: