2007年10月15日星期一

恢复 ubuntu 中 subversion 到旧版本

今早升级 ubuntu 后 subversion 就出问题了,更新和提交都不能用了,subversion 可是每天的必备工具,估计很多人都跟我一样,没有它不能干活吧。没关系,执行下面的命令就可以恢复旧版本的 subversion:


sudo apt-get install subversion=1.4.3dfsg1-1ubuntu1 libsvn1=1.4.3dfsg1-1ubuntu1


没有升级 ubuntu 的就先别升级这两个(subversion, libsvn1)软件包了,等到 ubuntu 把这个 bug 解决了再升吧。

2007年8月8日星期三

ipython介绍

  ipython 是一个 python 的交互式 shell,比默认的 python shell 好用得多,支持变量自动补全,自动缩近,支持 bash shell 命令,内置了许多很有用的功能和函数。在 ubuntu 下只要 sudo apt-get install ipython 就装好了,通过 ipython 启动。


下面是 ipython 中几个简单好用的 magic 函数:


%bg function
把 function 放到后台执行,例如: %bg myfunc(x, y, z=1),之后可以用jobs将其结果取回。myvar = jobs.result(5) 或 myvar = jobs[5].result。另外,jobs.status() 可以查看现有任务的状态。

%ed 或 %edit
编辑一个文件并执行,如果只编辑不执行,用 ed -x filename 即可。

%env
显示环境变量

%hist 或 %history
显示历史记录

%macro name n1-n2 n3-n4 ... n5 .. n6 ...
创建一个名称为 name 的宏,执行 name 就是执行 n1-n2 n3-n4 ... n5 .. n6 ... 这些代码。

%pwd
显示当前目录

%pycat filename
用语法高亮显示一个 python 文件(不用加.py后缀名)

%save filename n1-n2 n3-n4 ... n5 .. n6 ...
将执行过多代码保存为文件

%time statement
计算一段代码的执行时间

%timeit statement
自动选择重复和循环次数计算一段代码的执行时间,太方便了。


  另外,ipython 中用 ! 表示执行 shell 命令,用 $ 将 python 的变量转化成 shell 变量。通过这种两个符号,我们就可以做到和 shell 命令之间的交互,可以非常方便地做许多复杂的工作。比如你可以很方便地创建一组目录:


for i in range(10):
s = "dir%s" % i
!mkdir $s

不过写法上还是有一些限制,$ 后面只能跟变量名,不能直接写复杂表达式,$"dir%s"%i 就是错误的写法了,所以要先完全产生 python 的变量以后再用。像

for i in !ls: print i

这样的写法也是错的,可以这样:

a = !ls
for i in a: print i

  还有一点需要说明,就是执行普通的 shell 命令中如果有 $ 的话需要用两个 $。比如原来的echo $PATH现在得写成!echo $$PATH

2007年8月7日星期二

拿ipython当shell用

  ipython 不光可以执行 shell 命令,还可以把 shell 和 python 脚本混用。我当前目录下有 1.Wma 到 80.Wma 需要重命名为小写的 1.wma 到 80.wma,可以这么做:


files = !ls
for f in files:
!mv $f $f.lower()

  解释一下: ! 代表执行的 shell 命令,$ 代表以 python 字符串到 shell 字符串的转换。!ls 执行命令的结果 files 是 python 的列表,以 shell 的返回按行分割。