파이썬 watchdog 동작 정보

개요



파이썬에서 파일 변경등의 감시 용도로서 멀티 플랫폼에서 동작한다고 하는 watchdog 모듈을 이용하려고 생각해, 동작 확인을 실시했을 때의 메모입니다.

결론



결론입니다만, 파일 작성의 거동이 mac와 그 이외로 다르다고 하는 보고가 됩니다.

확인 내용



우선 준비


$ pip install watchdog

간단하네요.

확인한 코드



단순히 소정의 디렉토리에 있는 텍스트를 감시하는 것입니다.
#!/usr/bin/env python                                                                                                 
# coding=utf8                                                                                                         

from watchdog.observers import Observer                                                                               
from watchdog.events import PatternMatchingEventHandler                                                               
import sys                                                                                                            
import os                                                                                                             
import time                                                                                                           

class TextFileEventHandler(PatternMatchingEventHandler):
        def __init__(self, patterns=['*.txt', '*.text', '*.doc', '*.md'], ignore_patterns=None,
                                 ignore_directories=True, case_sensitive=False):
                super().__init__(patterns, ignore_patterns, ignore_directories, case_sensitive)

        def on_any_event(self, event):
                print(event)
                print(event.event_type)

if __name__ == "__main__":
        wdir = os.path.abspath(sys.argv[1])
        print("watch dir: ", wdir)
        evh = TextFileEventHandler()
        obs = Observer()
        obs.schedule(evh, wdir, recursive=True)
        print("watching..")
        obs.start()

        try:
                while True:
                        time.sleep(1)
        except KeyboardInterrupt:
                obs.unschedule_all()
                print("finishing..")           
                obs.stop() 
        obs.join() 

        print("end watch.")


mac에서 동작 확인


$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.6
BuildVersion:   17G7024



우선, 동작 결과는 위와 같습니다만, 결론에 쓴 부분으로서, 파일 작성시에 mac에서는 어떻게 되었는지를 기재합니다.

touch document/aa.txt
그렇다면,
created 이벤트만 생성됩니다.

데비안에서의 동작 확인



debian이라든지 docker의 python 이미지 공식을 이용했습니다. 순서로서는 이하와 같은 느낌이므로, 바삭바삭하게 확인할 수 있다고 생각합니다.
$ cd test
$ ls 
watch.py
$ md document
$ docker run -it -v `pwd`:/opt /bin/bash
# pip install watchgog
# cd /opt
# python watch.py document

이쪽도 동작 이미지를


windows10에서도 확인했지만, 움직임으로서는 debian과 같습니다.

touch document/aa.txt
그렇게 할 때,
created
modified
된다

후기



내용적으로 아무것도 없지만 mac의 움직임을 좋아합니다 w
그렇다고는 해도, 멀티 플랫폼으로 동작시키려고 했을 경우에는, 같은 동작이 되어 있던 것이 바람직하기 때문에, 미묘한 결과군요.
뭐, 백엔드에서 움직이고 있는 것에 의존하는 것입니다.

현재 5종류 있는 것 같습니다만, 이번 환경에서는 mac:FSEventsObserver, debian:InotifyObserver, windows:WindowsApiObserver라는 느낌입니다. obs를 생성하고 print(obs)를 보면 알 수 있습니다.
동작을 바꾸고 싶다면, 이 Observer를 자전으로 구현하면 된다는 것.

좋은 웹페이지 즐겨찾기