파이썬 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를 자전으로 구현하면 된다는 것.
Reference
이 문제에 관하여(파이썬 watchdog 동작 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/to_obara/items/3d174b13f227cd898bae
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
결론입니다만, 파일 작성의 거동이 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를 자전으로 구현하면 된다는 것.
Reference
이 문제에 관하여(파이썬 watchdog 동작 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/to_obara/items/3d174b13f227cd898bae
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ 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.")
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.13.6
BuildVersion: 17G7024
$ cd test
$ ls
watch.py
$ md document
$ docker run -it -v `pwd`:/opt /bin/bash
# pip install watchgog
# cd /opt
# python watch.py document
내용적으로 아무것도 없지만 mac의 움직임을 좋아합니다 w
그렇다고는 해도, 멀티 플랫폼으로 동작시키려고 했을 경우에는, 같은 동작이 되어 있던 것이 바람직하기 때문에, 미묘한 결과군요.
뭐, 백엔드에서 움직이고 있는 것에 의존하는 것입니다.
현재 5종류 있는 것 같습니다만, 이번 환경에서는 mac:FSEventsObserver, debian:InotifyObserver, windows:WindowsApiObserver라는 느낌입니다. obs를 생성하고 print(obs)를 보면 알 수 있습니다.
동작을 바꾸고 싶다면, 이 Observer를 자전으로 구현하면 된다는 것.
Reference
이 문제에 관하여(파이썬 watchdog 동작 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/to_obara/items/3d174b13f227cd898bae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)