以前一直使用Python自带的交互式Shell,感觉也还够用,至少比Ruby好;不过今天用了下IPython,发现它实在太强了,支持彩色高亮显示、代码补完、魔术函数、宏、编辑和保存文件、调用操作系统的Shell命令等功能。


先看下它长什么样:


第2行会注意到自动缩进,不需要自己去多敲空格了。

第4行我用了一个问号,它会显示这个对象的信息。

第5行我在a.i后敲了个tab,然后就自动显示了以i开头的属性名;并且由于这2个方法都是in开头,所以接下来会自动填充成a.in。

第6行可以看到,和标准的Shell一样会显示repr信息。

第7行我用了一个timeit魔法函数,它比使用timeit模块方便多了。

第8行说明这个timeit是有副作用的。

第9行演示了保存代码,同时也看到了魔法函数的实现。


看完演示后,如果对它感兴趣,就去下载吧。

IPython的下载页面里提供了很多版本,Windows下使用binary Windows installer版最方便。安装时自动找到了我装的Python 2.5/2.6/3.1,不过我装在2.5下了。

装好后就可以去运行C:\Python25\Scripts\ipython.bat了。不过会提示你没有readline,因此不支持彩色高亮显示和代码补完。

于是再去下载PyReadline,仍然使用安装版,装好后就正常了。


我最感兴趣的是魔术函数,因此仍然介绍它。

IPython会判断输入的字符是否符合魔术函数,是的话就调用魔术函数,否则使用Python来解析。

如何知道所有的魔术函数呢?方法很简单,输入lsmagic即可。

你会发现列出来的魔术函数都是%开头的,并且提示automagic开启,无需输入%。

也就是说,魔术函数实际上都是以%开头的,所以输入%,再按tab键,也可以列出所有魔术函数。

而要知道用法的话,输入magic就行了。

再介绍一个很好玩的魔术函数%bg:在后台调用另一个线程来执行一段函数。注意所有资源(包括stdout)都是共享的。执行完后可以用jobs对象来获取执行结果。习惯unix的应该会对此很熟悉。

其他的就自己看吧,定义宏也是用魔术函数。


最后再介绍下如何调用操作系统的Shell。

方法很简单,在命令前加上!符号即可,例如:

!dir c:\


如果要和Python的变量交互的话,变量前要加$符号,例如:

path = r'C:\Python25'
!dir $path -w


Python也能使用Shell的返回值,不过是以行为单位的字符串列表:

d = !dir $path -w
for l in d:
    print l