11

我爱zsh了很久,最近我发现了ipython交互式解释器相对于python它本身的优势。能够cd , to ls , to run or to ! 确实很方便。但是现在在 ipython 中拥有如此笨拙的 shell 感觉很奇怪,我想知道如何更好地集成我的 zsh 和我的 ipython。

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

所以,我的问题来了:你如何在你的 shell 和你的 python 命令循环之间有效地工作?我是否缺少一些明显的集成策略?我应该在 emacs 中做所有这些吗?

4

2 回答 2

11

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

在 genutils.py 之后的行

如果不调试:

删除行:

stat = os.system(cmd)

将其替换为:

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

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

就像我说的那样,它对我有用,尽管我不确定幕后是什么让我感到厌烦。

于 2009-07-01T18:19:24.940 回答
7

您可以通过以感叹号开头并在 python 变量中捕获输出来运行 shell 命令。示例:列出目录中的/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

通过阅读魔法命令列表,您可以做很多事情:

ipy> %magic

请参阅 Ipython 文档的shell 部分

于 2009-06-10T06:44:42.860 回答