如何整合ZSH和(i)python?

时间:2009-06-10 03:11:55

标签: python shell zsh ipython

我爱上了zsh很长一段时间,最近我发现了ipython互动翻译对python本身的优势。能够 cd ls 运行确实非常方便。但是现在在ipython中使用这样一个笨拙的shell感觉很奇怪,我想知道如何更好地整合我的zsh和我的ipython。

当然,我可以在python中重写我的.zshrc和我的所有脚本,并从ipython模拟我的大部分shell世界,但感觉不对。而且我显然还没准备好将ipython用作主shell。

所以,我的问题就出现了:你如何在shell和python命令循环之间有效地工作?我错过了一些明显的整合策略吗?我应该在emacs中做所有这些吗?

2 个答案:

答案 0 :(得分:9)

我在zsh列表上问了这个问题,这个答案对我有用。 YMMV。

在行后的genutils.py

  

如果不是调试:

删除该行:

  

stat = os.system(cmd)

将其替换为:

  

stat =   subprocess.call(CMD,壳=真,可执行= '/斌/ zsh的')

你知道,问题是那个“!” call使用os.system来运行它,默认为manky old / bin / sh。

就像我说的那样,它对我有用,虽然我不确定幕后会出现什么问题。

答案 1 :(得分:6)

您可以通过使用感叹号启动它们来运行shell命令,并在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文档的shell section