[python] 介紹幾個Interactive Shell (上)


用Python編程,免不得需要做些實驗,你可以python interactive shell 里面試一下某個表達式是否正確,某個包 是怎樣使用的,用dir(obj)看看一個對象都有些啥屬性,用help(foo)查看幫助 (這有賴於python強大的類型自省(type introspection)能力——C++粉絲又被吐槽了)。。。

另外一方面,matplotlib這類擴展(或者說應用?)更是以interactive shell作為主要交互界面了。

python 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 標簽頁——我不太清楚 :-(

參考文檔:

PyCrust的改進版本: PySlices

http://code.google.com/p/wxpysuite/

PySlicesScreenshot

 

這是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的話,也可以直接全部使用這里下載的,那就用不着修改了)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM