基于pyinotfy,通过删除未使用的类来简化模块,并添加新的有用函数来实现回调
Yinotif的Python项目详细描述
概述
yinotify帮助用户创建在Linux内核检测到监视器事件时触发的回调函数。用户可以使用指定的操作在事件中注册监视和Bing的目录。内部类yivent可以帮助收集基于已注册事件的统计信息和状态。轮询一个或多个目录以确定是否有任何更改的是Linux内核接口,它帮助我们从应用程序级别控制更多内容
该项目基于inotify,并删除了一些未使用的函数和类
安装
通过pip安装:
$ sudo pip install Yinotify
示例
简单用法:
exp1: def printEvent(): print("Action triggered!!") yiSample = Yinotify.fEvent(_target_folder,"IN_ISDIR",printEvent) exp2: def printEvent(arg): print("Action triggered!!",arg) yiSample = Yinotify.fEvent(_target_folder,"IN_ISDIR",printEvent,action_args=("arg1",))
单元测试
pytest示例:
def printEvent(timeSlot,case): global result duration = time.time() - timeSlot print("%s:::Action1 triggered!!"%(duration)) result[case] = True return def printEvent2(case): global result print("Action2 triggered!!") result[case] = True return def printEvent3(): global result print("Action3 triggered!!") result["test_events_IN_MOVED"] = True return def test_events_IN_ISDIR(): result["test_events_IN_ISDIR"] = False test1 = Yinotify.Yivent(folder,"IN_ISDIR",printEvent2,action_args=("test_events_IN_ISDIR",)) cmd = "ls %s/" % (folder) print("test_events_IN_ISDIR::"+cmd) os.popen(cmd) n = 0 while n < 2: time.sleep(1) n += 1 del test1 assert result["test_events_IN_ISDIR"] == True print("--------------------------------------------------------") def test_events_IN_OPEN(): result["test_events_IN_OPEN"] = False timeSlot = time.time() test2 = Yinotify.Yivent(folder,"IN_OPEN",printEvent,action_args=(timeSlot,"test_events_IN_OPEN")) cmd = "touch %s/Yijun2" % (folder) print("test_events_IN_OPEN::"+cmd) os.popen(cmd) n = 0 while n < 2: time.sleep(1) n += 1 del test2 assert result["test_events_IN_OPEN"] == True print("--------------------------------------------------------") def test_events_IN_MOVED(): result["test_events_IN_MOVED"] = False test3 = Yinotify.Yivent(folder,"IN_MOVED_FROM,IN_MOVED_TO",printEvent3) cmd = "mv %s/Yijun2 %s/Yijun22" % (folder,folder) print("test_events_IN_MOVED::"+cmd) os.popen(cmd) n = 0 while n < 2: time.sleep(1) n += 1 del test3 assert result["test_events_IN_MOVED"] == True print("--------------------------------------------------------") def test_events_IN_CREATE(): result["test_events_IN_CREATE"] = False timeSlot = time.time() test4 = Yinotify.Yivent(folder,"IN_CREATE",printEvent,action_args=(timeSlot,"test_events_IN_CREATE")) os.mkdir(folder+'/Yijun3') print("test_events_IN_CREATE::os.mkdir(folder+'/Yijun3')") n = 0 while n < 2: time.sleep(1) n += 1 del test4 assert result["test_events_IN_CREATE"] == True print("--------------------------------------------------------") def test_events_IN_DELETE(): result["test_events_IN_DELETE"] = False timeSlot = time.time() test5 = Yinotify.Yivent(folder,"IN_DELETE",printEvent,action_args=(timeSlot,"test_events_IN_DELETE")) os.remove(folder+"/Yijun22") os.rmdir(folder+"/Yijun3") print("test_events_IN_DELETE::os.remove(folder+'/Yijun2')") n = 0 while n < 2: time.sleep(1) n += 1 del test5 assert result["test_events_IN_DELETE"] == True print("--------------------------------------------------------")