Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # coding: utf-8
- import select
- import os
- import glob
- def filename_and_path(filepath):
- fullpath = os.path.abspath(filepath)
- print("fullpath = ",fullpath)
- filename = os.path.basename(fullpath)
- return [os.path.basename(fullpath),os.path.dirname(fullpath)]
- def checkFile(filename,dirpath):
- # 指定されたディレクトリのファイル一覧を取得する
- files=os.listdir(dirpath)
- for item in files:
- if os.path.basename(item) == filename:
- return True
- return False
- def watchDir(filename,dirpath):
- # 指定されたディレクトリを監視
- print("dirpath =",dirpath)
- f = os.open(dirpath,os.O_RDONLY)
- kq = select.kqueue()
- ke = select.kevent(f, filter=select.KQ_FILTER_VNODE,
- flags=select.KQ_EV_ADD | select.KQ_EV_ENABLE | select.KQ_EV_CLEAR,
- fflags=select.KQ_NOTE_DELETE | select.KQ_NOTE_WRITE)
- events = kq.control([ke], 0, None)
- floop=True
- while floop:
- r_events = kq.control([ke], 1, None)
- for event in r_events:
- print (event)
- if event.fflags & select.KQ_NOTE_WRITE:
- print ("dir was updated!")
- # 対象のファイルが追加されたか確認
- if checkFile(filename,dirpath):
- floop=False
- kq.close()
- os.close(f)
- print(dirpath+"/"+filename)
- watchFile(dirpath+"/"+filename)
- def watchFile(filepath):
- f = os.open("foo",os.O_RDONLY)
- kq = select.kqueue()
- ke = select.kevent(f, filter=select.KQ_FILTER_VNODE,
- flags=select.KQ_EV_ADD | select.KQ_EV_ENABLE | select.KQ_EV_CLEAR,
- fflags=select.KQ_NOTE_DELETE | select.KQ_NOTE_WRITE)
- events = kq.control([ke], 0, None)
- floop=True
- while floop:
- r_events = kq.control([ke], 1, None)
- for event in r_events:
- print (event)
- if event.fflags & select.KQ_NOTE_DELETE:
- print( "file was deleted!")
- floop=False
- elif event.fflags & select.KQ_NOTE_WRITE:
- print ("file was updated!")
- kq.close()
- os.close(f)
- print("aaa")
- # ディレクトリ監視に切り替え
- filename,dirpath = filename_and_path(filepath)
- watchDir(filename, dirpath)
- watchFile("foo")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement