用Python編程,免不得需要做些實驗,你可以python interactive shell 里面試一下某個表達式是否正確,某個包 是怎樣使用的,用dir(obj)看看一個對象都有些啥屬性,用help(foo)查看幫助 (這有賴於python強大的類型自省(type introspection)能力——C++粉絲又被吐槽了)。。。
另外一方面,matplotlib這類擴展(或者說應用?)更是以interactive shell作為主要交互界面了。
不過python自己的interactive shell 還是弱了一點,比如沒有代碼補全,沒有語法高亮,不能一次選擇歷史里面 的多行進行重用。下面簡單介紹幾個增強型的Python Interactive Shell.
IDLE
http://wiki.python.org/moin/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
http://dreampie.sourceforge.net/



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
http://code.google.com/p/wxpysuite/
這是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的話,也可以直接全部使用這里下載的,那就用不着修改了)。