Question

I have been in love with zsh for a long time, and more recently I have been discovering the advantages of the ipython interactive interpreter over python itself. Being able to cd, to ls, to run or to ! is indeed very handy. But now it feels weird to have such a clumsy shell when in ipython, and I wonder how I could integrate my zsh and my ipython better.

Of course, I could rewrite my .zshrc and all my scripts in python, and emulate most of my shell world from ipython, but it doesn't feel right. And I am obviously not ready to use ipython as a main shell anyway.

So, here comes my question: how do you work efficiently between your shell and your python command-loop ? Am I missing some obvious integration strategy ? Should I do all that in emacs ?

Was it helpful?

Solution

I asked this question on the zsh list and this answer worked for me. YMMV.

In genutils.py after the line

if not debug:

Remove the line:

stat = os.system(cmd)

Replace it with:

stat = subprocess.call(cmd,shell=True,executable='/bin/zsh')

you see, the problem is that that "!" call uses os.system to run it, which defaults to manky old /bin/sh .

Like I said, it worked for me, although I'm not sure what got borked behind the scenes.

OTHER TIPS

You can run shell commands by starting them with an exclamation mark and capture the output in a python variable. Example: listing directories in your /tmp directory:

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

The list object is a special ipython object with several useful methods. Example: listing files ending with .pdf

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

There is a lot of things you can do by reading the list of magic commands:

ipy> %magic

See the shell section of the Ipython documentation.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top