2012年2月27日星期一

[python] 介绍几个Interactive Shell (上)

用Python编程,免不得需要做些实验,你可以python interactive shell 里面试一下某个表达式是否正确,某个包 是怎样使用的,用dir(obj)看看一个对象都有些啥属性,用help(foo)查看帮助。。。

另外一方面,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 标签页——我不太清楚 :-(

参考文档:

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

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2012/02/27/python-interactive-shells-1.html)

2012年2月21日星期二

介绍几个Windows下的小工具

随手记: FlashPad

作者的介绍:

FlashPad是一款轻便的笔记工具。随时按下快捷键(缺省为Alt+Z)可调出它,再次按下相同快捷键或ESC键则可令其隐藏、回到系统托盘中。您可在日常工作中使用该软件快速地记下瞬间灵感、工作备忘、或者电话号码。

和Windows自带的记事本不同的是,FlashPad会自动保存您输入的全部内容,并支持多页(TAB)显示。

此外,FlashPad 支持数学计算,输入“1+2”,按下 Ctrl+Enter,即可出现计算结果,方便您进行简单的日常计算。

我觉得这个工具是我一直在找的:它满足的是“随手记”这个场景,你可以随手记录些杂七杂八的内容,多条记录简单地通过”---”分隔,多标签页可以用来能简单地分个类。自动保存,启动时自动加载,不会用“要不要保存”这类问题来烦你。

我使用过其它一些工具,都不太能满足这个简单的场景:而CintaNotes得一条条地记录,适合记录一些“有所得”的内容,还得分开填标题、链接、Tag什么的,用在这里太拘谨了; minipad2每条记录都需要独立编辑,调整内容不太方便; BooguNote操作太麻烦了,点来点去我还不如用org-mode; 而ATnotes/TurboNotes等桌面贴的编辑功能又比较差。

flashpad screenshot

剪贴板历史管理: ArsClip

剪贴板历史管理工具有很多不错的,善用佳软推荐的CLCLClipX都是不错的选择(详情参见: CLCL和ClipX:最实用的剪贴板增强工具,免费超小_善用佳软_新浪博客剪贴板增强软件综述:CLCL,ClipX,Ditto等(更新ArsClip) | 善用佳软 这两篇)。

不过我有一个比较特殊一点的需求:要求保留的历史记录比较多。虽然大多数这类软件对于记录多少条历史,都是可以配置的,但它们都很少为这种情况下做过特殊考虑:CLCL和ClipX都只是根据数量的增大而将菜单撑得很长很长,让人很难去选择,其实只需要列出最近的10来条记录,再老的记录就可以用个二级菜单、列表框之类的就可以了。另外,记录数一多,一条条让人眼去挑是很累的,所以能提供一个搜索功能是最好的(而且应该是增量式搜索)。——满足这个要求的,就只有ArsClip和Ditto这两个工具了。

arsclip menu

善用佳软选择Ditto作为首选(Ditto:首选的剪贴板增强软件 | 善用佳软),但用了一阵,喜欢不起来,主要是功能太多了,设置界面太复杂了,让人头晕。于是选择了ArsClip。

BTW: 除Ctrl-V之外的粘贴方式: 因为我使用vim/emacs/命令行这类程序比较多,Firefox也用keysnail配成了emacs的参见风格,它们都不是用Ctrl-V来粘贴,所以Ditto可以针对不同程序自定义粘贴方式(参见: Ditto官方说明  善用佳软的介绍) 这一点很吸引我,先让我犹豫了好一阵要不要切换到Ditto,后来我又去拿了ArsClip的代码来改(是的,虽然不是开源软件,但作者提供了源代码哦)——最后发现ArsClip提供了Shift+Insert、Mimic Typing、Clipboard Only这三种方式备选,也可以针对每个程序进行设置(见上图),基本上够用了。

链接: ArsClip:超強圖文剪貼簿 | T客邦

MuseTips Text Filter

这个工具也很简单,就是在打开一个文本文件,随着你的输入过滤出包含这些关键字的行。看下面这个gif就明白啦:

textfilter demo

由于Emacs里有这样的扩展(EmacsWiki: HideSearch),我正经编辑文件时都用Emacs。所以单独使用这个小工具的场合,主要就一个——搜索我在博客园的闪存: 我用闪存记录一些零星的心得、想法、问题、待办,然后差不多每月一次将闪存导出为文件,还用AutoIt写了段小脚本来调用TextFilter打开最新的闪存离线文件,刚才写这篇文章就用了好多次这个功能。

本文链接



(automatically copied by ifttt from http://www.cnblogs.com/bamanzi/archive/2012/02/21/a-few-windows-tools.html)