用python检测文件是否正在被修改

2013年11月17日 23:07

使用lsof filename 可以查询到文件正在被谁使用。下面是python实现的检测代码。

a.py检测代码

#encoding=utf-8
import os


def isOpen(filename):
    # 执行lsof命令
    p = os.popen("lsof %s" % filename)
    # lsof找到打开的文件时有输出
    content = p.read()
    p.close()
    # 通过是否有输出,判断文件是否打开
    return bool(len(content))

if __name__ == '__main__':
    print isOpen("a.log")

b.py模拟正在修改文件

#encoding=utf-8
import time

if __name__ == '__main__':
    f = open("a.log", 'a')
    while True:
        time.sleep(5)

注意只能检测到文件被谁打开的情况。在python中就是open()了一个文件,并且还没有close()掉的情况。

以下情况是检测不到的:

vim xxx

python xxx

上面是比较简陋的一种方式,更强大的功能请见pyinotify模块

评论(1) 阅读(2181)

将[{},{}]转为dict

2013年11月14日 21:31

经常遇到一种需求,需要把从数据库取出的数据,转为dict对象([{}, {},...]-->dict)。

rs = [{"user_id":111, "name":"abc"}, {"user_id":123, "name":"edf"}]
print dict(map(lambda r:[r["user_id"], r], rs))
>>{111: {'user_id': 111, 'name': 'abc'}, 123: {'user_id': 123, 'name': 'edf'}}

上面看起来比较啰嗦,换一种写法

print dict([r["user_id"], r] for r in rs)

更简洁的写法

{r['user_id'] : r for r in rs}

 

 

评论(2) 阅读(1137)