用Python编程,免不得需要做些实验,你可以python interactive shell 里面试一下某个表达式是否正确,某个包 是怎样使用的,用dir(obj)看看一个对象都有些啥属性,用help(foo)查看帮助 (这有赖于python强大的类型自省(type introspection)能力——C++粉丝又被吐槽了)。。。
另外一方面,matplotlib这类扩展(或者说应用?)更是以interactive shell作为主要交互界面了。
不过python自己的interactive shell 还是弱了一点,比如没有代码补全,没有语法高亮,不能一次选择历史里面 的多行进行重用。下面简单介绍几个增强型的Python Interactive Shell.
IDLE
IDLE 是python的自带IDE(是的,它有编辑器、有调试器、还有这里讨论的interactive shell功能),采用tk编写 界面,虽然功能不是太强,但好在自带,并且跨平台,可以救急用用。
IDLE里面的interactive shell相对终端版本(就是不带参数运行python,或者带-i参数执行时出现的shell)而言, 多了几个功能:
代码高亮
代码补全(按tab键出现)
显示函数说明,比如输入"os.path.isfile("后它会以提示框现实os.path.isfile这个函数的signature和文档
BTW: idle的shell里重用历史记录的快捷键是Alt-p(上一条)和Alt-n(下一条) —— Emacs用户表示这很自然 :-)。
又: 有个IdleX项目, 为IDLE提供了一些增强扩展和插件,在编辑、执行、帮助、shell各方面都有增强,有兴趣的 可以试试。下面是与shell相关的增强:
Terminal-like behavior for Shell. Cursor stays in prompt and up/down arrow keys cycle the command history.
Persistent history of Shell commands across sessions.
Paste and run multiple lines in the shell.
Non-blocking interactive GUI development for Tkinter, GTK, Qt, Qt4, PySide, wxPython
Matplotlib support for interactive figures when using the subprocess.
Clear Shell Window without restarting.
Capture large output and display it as an expandable button.
DreamPie
DreamPie 的功能定位比较单一,没有IPython里面的并发、shell命令等功能,它只是要改善一般使用interactive shell时候的不便: 多行输入/重用不方便、没有代码补全,没有即时的函数帮助(calltip)等。
dreampie有几个特色功能:
支持代码高亮,随着你的输入自动变色,而且支持色彩主题(缺省提供dark/light两套,要自己配置也可以);
在界面下方提供了一个多行输入框,你可以方便地编辑多行输入,比如回到上一行去修改;
如果一段输出比较长,它可以将它折叠起来,方便你查看前面的内容;
支持Python/Jython/IronPython;
可以将整个交互过程保存为一个漂亮的HTML,颜色/缩进都很好地保留下来了——而且你下次还可以加载这份历 史,继续探索!
如果你的语句进入了死循环,或者因为I/O等原因无法完成,你可以用Ctrl-C中止它,但你的会话不会就此中 止了(但在wxpy的python shell里面(见下节),就会中止),你的历史记录也还在
wxpython里面的PyShell, PyCrust和PyAlaMode
这是wxpython里面自带的工具,其实PyCrust = PyAlaCarte + PyFilling, 而PyAlaMode = PyAlaCarte + PyShell + PyFilling。其中PyShell是python shell交互功能,PyAlaCarte是个简单的Python代码编辑 器,PyFilling是个对象察看器。所以PyAlaMode就是相对PyCrust多了文件编辑的功能。
在代码高亮、自动补全、自动显示帮助方面,wxpy跟其它python shell差不多,不再多数。唯一需要介绍的是 PyCrust/PyAlaMode下方面板里面的几个标签:
Namespace 标签的功能相当于dir()函数,它列出当前python shell名字空间里面的所有对象,以及它们的属性;
Display 标签的功能相当于print()函数,它会以字符串方式展示出一个对象,而且是调用pprint模块来显示 的,用法是在shell里面想使用print()的时候改用pp()这个函数,该对象就会在这里列出结果了;
Calltip 标签页显示一个函数的signature和帮助,这个函数是你在shell里最后一次输入的函数名
History 标签页列出在shell中所输入的全部历史
Dispatcher 标签页——我不太清楚 :-(
参考文档:
官方文档: The Py Manual (写得太简单了,你会失望的)
用PyCrust使得wxPython更易处理 ,来自wxPython in Action一书中相关章节,中文的。
PyCrust的改进版本: PySlices
这是PyShell/PyCrust的改进版本:
PySlices改进了多行输入的方式,一般的python shell只是在class/def/if/for这类语句后面呈现多行输入方式,
等你输入下一行。但PySlices缺省是多行输入,你可以在输入多行后,按Ctrl-Enter一并提交执行。也可以切换到 旧方式(在菜单Options->Settings->Enable Shell Mode)。
PySlices还从IPython学了几个功能过来:
函数调用的括号是可选的,比如"dir a"等同于"dir(a)"
支持一些常用unix shell命令,比如pwd, cd, ls
支持调用外部命令,只要命令行前面添加!就可以了,比如"!grep –help"
多行的输入/输出可以折叠起来,跟DreamPie差不多
最后说一下安装,从wxPython的ChangeLog看,应该是在2.8.11就合入了wxPython,但在Debian的安装包里又没有看 到,很奇怪。所以可以先安装python-wxtools 包,然后从 http://code.google.com/p/wxpysuite/downloads/list 这里下载,然后将PySlices*.*这几个文件提取出来即可 (需要简单修改一下两个py文件,将 ="import wx_py as py"= 修改为 ="import wx.py as py"= ; 如果你不安装 python-wxtools的话,也可以直接全部使用这里下载的,那就用不着修改了)。