직접 만들기
1. 디렉토리나 파일 갯수를 count 해서 증가하면 명령을 실행하는 등 규칙을 정한다. (파일 값의 수정은 감시 불가)
2. 특정 디렉토리나 파일 자체를 hash해서 hash값이 바뀌면 명령을 실행하도록 한다. (파일 값의 수정도 감시 가능)
watchdog 모듈(라이브러리 이용하기)
watchdog
Filesystem events monitoring
pypi.org
기본 폼 1.
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net
import os
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class Target:
watchDir = os.getcwd()
#watchDir에 감시하려는 디렉토리를 명시한다.
def __init__(self):
self.observer = Observer() #observer객체를 만듦
def run(self):
event_handler = Handler()
self.observer.schedule(event_handler, self.watchDir,
recursive=True)
self.observer.start()
try:
while True:
time.sleep(1)
except:
self.observer.stop()
print("Error")
self.observer.join()
class Handler(FileSystemEventHandler):
#FileSystemEventHandler 클래스를 상속받음.
#아래 핸들러들을 오버라이드 함
#파일, 디렉터리가 move 되거나 rename 되면 실행
def on_moved(self, event):
print(event)
def on_created(self, event): #파일, 디렉터리가 생성되면 실행
print(event)
def on_deleted(self, event): #파일, 디렉터리가 삭제되면 실행
print(event)
def on_modified(self, event): #파일, 디렉터리가 수정되면 실행
print(event)
if __name__ == ‘__main__’: #본 파일에서 실행될 때만 실행되도록 함
w = Target()
w.run()
기본 폼 2.
import time
import os
try:
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
except ModuleNotFoundError as e:
print (e)
os.system("pip install watchdog")
# ------------------------------------------------
class Handler(FileSystemEventHandler):
def on_created(self, event): # 파일 생성시
print (f'event type : {event.event_type}\n'
f'event src_path : {event.src_path}')
if event.is_directory:
print ("디렉토리 생성")
else: # not event.is_directory
"""
Fname : 파일 이름
Extension : 파일 확장자
"""
Fname, Extension = os.path.splitext(os.path.basename(event.src_path))
'''
1. zip 파일
2. exe 파일
3. lnk 파일
'''
if Extension == '.zip':
print (".zip 압축 파일 입니다.")
elif Extension == '.exe':
print (".exe 실행 파일 입니다.")
os.remove(Fname + Extension) # _파일 삭제 event 발생
elif Extension == '.lnk':
print (".lnk 링크 파일 입니다.")
def on_deleted(self, event):
print ("삭제 이벤트 발생")
def on_moved(self, event): # 파일 이동시
print (f'event type : {event.event_type}\n')
class Watcher:
# 생성자
def __init__(self, path):
print ("감시 중 ...")
self.event_handler = None # Handler
self.observer = Observer() # Observer 객체 생성
self.target_directory = path # 감시대상 경로
self.currentDirectorySetting() # instance method 호출 func(1)
# func (1) 현재 작업 디렉토리
def currentDirectorySetting(self):
print ("====================================")
print ("현재 작업 디렉토리: ", end=" ")
os.chdir(self.target_directory)
print ("{cwd}".format(cwd = os.getcwd()))
print ("====================================")
# func (2)
def run(self):
self.event_handler = Handler() # 이벤트 핸들러 객체 생성
self.observer.schedule(
self.event_handler,
self.target_directory,
recursive=False
)
self.observer.start() # 감시 시작
try:
while True: # 무한 루프
time.sleep(1) # 1초 마다 대상 디렉토리 감시
except KeyboardInterrupt as e: # 사용자에 의해 "ctrl + z" 발생시
print ("감시 중지...")
self.observer.stop() # 감시 중단
myWatcher = Watcher("C:/Users/samsung/HealthCare")
myWatcher.run()
'개발자 > Python' 카테고리의 다른 글
Python (파이썬) - 도서 검색 프로그램 (0) | 2020.08.07 |
---|---|
Python (파이썬) 리눅스 아나콘다 설치하기 (0) | 2020.07.21 |
Python 소프트웨어 활용 및 코딩 기말고사 (0) | 2020.06.22 |
Python (파이썬) Enum(열거형) (0) | 2020.06.04 |
Python (파이썬) 머신러닝 scikit (0) | 2020.06.03 |