星期三, 一月 31, 2007

fcntl for Python

今天那里学到的,做笔记如下:

A进程:
from fcntl import *
f=open("/tmp/1.txt","w")
flock(f.fileno(),LOCK_EX|LOCK_NB) #只写LOCK_EX,是阻塞的方式锁文件

B进程:
from fcntl import *
f=open("/tmp/1.txt","w")
flock(f.fileno(),LOCK_EX|LOCK_NB)

引起如下异常,就可以在异常处理中做额外的处理了
IOError: [Errno 35] Resource temporarily unavailable

文件解锁:
flock(f.fileno(),LOCK_UN)

另:
在ASPN找到的,跨win32和unix的文件加锁示例:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65203

标签: , , , , ,

星期一, 一月 08, 2007

最近的练手程序,我的相册

我的新相册:
http://qingfeng.ushared.com/photos/

最近写了一个练手程序,不为别的,只为了练习一下Emacs:),这是一个相册程序的一部分,主要用于展示连续照片,更多的关于相册的功能,打算慢慢完成了。不得不说Emacs确实是有其独特的优点的,这次印象比较深的几个点是:
1.强大的Bookmark List,可以把本地文件,远程文件都建立书签,随时编辑
2.tramp,只要配置好ssh,就可以像编辑本地文件一样随时编辑线上文件
3.神奇的M-/,不同于其他编辑器的语法提示,Emacs的语法提示,完全是建筑在他对字符串,目录的分析之上的,任何只要存在的字符串都有可能提示
4.Lisp,用Emacs最大的痛苦,同时也是最大的乐趣就是DIY,完全打造一个属于自己的编辑器

http://qingfeng.ushared.com/photos/
另:这个相册后台完全基于Django+fcgi,前端相册展示是一个开源的Ajax相册展示,不为别的,支持Safari很好

标签: , , ,

星期五, 十二月 22, 2006

真的没想到Emacs在mac表现这么良好,中文、输入法、打开速度都非常好,打算学习一下:),毕竟TextMate还是贵了点,也找到了Emacs对django的支持

http://code.djangoproject.com/wiki/Emacs

效果如下:

标签: , , ,

星期六, 十二月 16, 2006

Python的Miss Method

今天参加BJUG的活动,了解到了ruby的一个特性:Miss Method,就是在调用一个类不存在的方法时,可以调用自定义的一个函数。python其实也可以实现这个特性,只要复写__getattr__方法即可,示例代码如下:

In [9]: class A:
...: def __getattr__(self,name):
...: if name in self.__dict__:
...: return name
...: else:
...: return "XXXXX"
...:

else的部分,可以替换成自定义的代码即可,你可以为类添加上这个缺少的方法,或者告诉用户一个错误,或者调用一个默认方法,等等:)

标签: ,

星期六, 十二月 09, 2006

twill: a simple scripting language for Web browsing

twill,一个模拟浏览器行为的脚本,很有趣。

你可以先安装他
easy_install twill

示例代码:
go http://www.sina.com.cm/
show
showforms
showhistory

Python API
from twill.commands import *
go("http://www.python.org/")
showforms()

参考资料:
http://twill.idyll.org/
http://twill.idyll.org/python-api.html
http://agiletesting.blogspot.com/2005/09/web-app-testing-with-python-part-3.html

标签: ,

在Mac OS X下尝试ctypes

今天在mac下尝试了一下ctypes,感觉不错,又温习了一下N久没碰的C语言,唯一要注意的就是gcc的编译选项,在Mac下比较怪异。

hello.h
int add(int a, int b);

hello.c
#include "hello.h"
int add(int a,int b)
{
return a+b;
};

编译出hello.o
cc -c hello.c

编译成动态链接库hello.so
cc -bundle -flat_namespace -undefined suppress -o hello.so hello.o

python
from ctypes import *
lib=CDLL("hello.so")
lib.add(1,2)
=>3

参考资料:
http://wiki.woodpecker.org.cn/moin/FeihuTryPyrex
http://www.pgsqldb.org/pgsqldoc-cvs/xfunc-c.html

标签: , , ,

星期三, 十一月 29, 2006

Python easy_install

eazy_install,它的主页是http://peak.telecommunity.com/DevCenter/EasyInstall

与这个项目密切关联的是一个叫Python Eggs的东西,它的口号是:"Eggs are to Pythons as Jars are to Java...",我们大概明白它是什么了,当然这不是今天的主要话题

要安装easy_install很简单,网站上有一个ez_setup.py,这个相当于在线安装程序。当然,前提条件是你需要网络,另外还要有Python^_^

ez_setup.py 执行之后,Python/Scripts文件夹里就easy_install.exe这个可执行文件和easy_install-script.py这个 Python脚本了,两个功能是一样的。接着我们就可以随心所欲的安装我们需要的组件,就像apt或者gem一样简单:

easy_install Django

安装好的文件都在默认的site-packages文件夹下,一般直接删除即可卸载!

标签: ,