cómo integrar ZSH y (i) pitón?
Pregunta
He estado enamorado de zsh
durante mucho tiempo, y más recientemente he estado descubriendo las ventajas del intérprete interactivo ipython
sobre python
sí. Ser capaz de cd , ls , Ejecutar o es realmente muy práctico. Pero ahora se siente raro tener una concha tan torpe cuando en ipython, y me pregunto cómo podría integrar mi zsh y mi ipython mejor.
Por supuesto, podría volver a escribir mi .zshrc y todos mis scripts en Python, y emular la mayor parte de mi mundo exterior desde ipython, pero no se siente bien. Y estoy obviamente no listo para usar ipython como una concha principal de todos modos.
Por lo tanto, aquí viene mi pregunta: ¿cómo trabajar de forma eficaz entre su concha y su python-bucle de comandos? Me estoy perdiendo algo de estrategia de integración obvio? Debería hacer todo lo que en emacs?
Solución
hice esta pregunta en la lista zsh y esta respuesta trabajó para mí. Tu caso es distinto.
En genutils.py después de la línea
Si no depuración:
Eliminar la línea:
stat = os.system (cmd)
Reemplazar con:
stat = subprocess.call (cmd, shell = True, ejecutable = '/ bin / zsh')
se ve, el problema es que esa "!" os.system llamada utiliza para ejecutarlo, que por defecto es manky de / bin / sh.
Como dije, que trabajó para mí, aunque no estoy seguro de lo que consiguió borked detrás de las escenas.
Otros consejos
Puede ejecutar comandos de shell se inician con un signo de exclamación y capturar el resultado en una variable pitón. Ejemplo: listado de directorios en el directorio /tmp
:
ipy> import os
ipy> tmplist = !find /tmp
ipy> [dir for dir in tmplist if os.path.isdir(dir)]
El objeto de lista es un objeto especial ipython con varios métodos útiles. Ejemplo: lista de archivos que terminan en .pdf
ipy> tmplist.grep(lambda a: a.endswith('.pdf')) # using a lambda
ipy> tmplist.grep('\.pdf$') # using a regexp
Hay un montón de cosas que puede hacer mediante la lectura de la lista de comandos mágicos:
ipy> %magic
Consulte el sección shell de la documentación IPython.