نظارت بر فایلها با Watchdog در پایتون: اتوماسیون و اسکریپتنویسی
در دنیای اتوماسیون و اسکریپتنویسی، اغلب نیاز به واکنش نشان دادن به تغییرات در سیستم فایل داریم. این تغییرات میتواند شامل ایجاد، حذف، تغییر یا جابجایی فایلها و دایرکتوریها باشد. کتابخانه Watchdog در پایتون ابزاری قدرتمند برای نظارت بر این تغییرات و اجرای اقدامات لازم به صورت خودکار فراهم میکند. این مقاله به بررسی جامع Watchdog، نحوه نصب، مفاهیم کلیدی و مثالهای عملی برای استفاده از آن در پروژههای اتوماسیون میپردازد.
مقدمهای بر Watchdog
Watchdog یک کتابخانه پایتون است که به شما امکان میدهد تغییرات در سیستم فایل را به صورت real-time نظارت کنید. این کتابخانه از APIهای سیستم عامل برای شناسایی تغییرات استفاده میکند و رویدادهای مربوطه را به شما اطلاع میدهد. Watchdog به طور خاص برای ایجاد برنامههایی طراحی شده است که به تغییرات در فایلها و دایرکتوریها واکنش نشان میدهند، مانند پشتیبانگیری خودکار، همگامسازی فایلها، و اجرای اسکریپتها پس از تغییر یک فایل خاص.
نصب Watchdog
نصب Watchdog بسیار ساده است و میتوانید از pip، مدیر بسته پایتون، برای این کار استفاده کنید. کافی است دستور زیر را در ترمینال یا خط فرمان خود اجرا کنید:
pip install watchdog
پس از نصب، میتوانید Watchdog را در اسکریپتهای پایتون خود import کنید.
مفاهیم کلیدی Watchdog
Watchdog بر اساس چند مفهوم کلیدی کار میکند که درک آنها برای استفاده موثر از این کتابخانه ضروری است:
- Observer: یک کلاس که وظیفه نظارت بر یک یا چند دایرکتوری را بر عهده دارد.
- EventHandler: یک کلاس پایه که باید از آن ارثبری کنید تا رویدادهای سیستم فایل را مدیریت کنید. شما میتوانید متدهایی را در این کلاس override کنید تا به رویدادهای خاصی مانند ایجاد، حذف، تغییر یا جابجایی فایلها واکنش نشان دهید.
- Event: یک کلاس که اطلاعات مربوط به یک رویداد سیستم فایل را در خود نگه میدارد. این اطلاعات شامل نوع رویداد، مسیر فایل یا دایرکتوری تغییر یافته و غیره است.
- Watch: یک شیء که نشاندهنده یک دایرکتوری تحت نظارت است.
ایجاد یک Event Handler ساده
برای شروع، یک Event Handler ساده ایجاد میکنیم که رویدادهای ایجاد و حذف فایلها را چاپ میکند. کد زیر را در نظر بگیرید:
import time
import watchdog.events
import watchdog.observers
class MyHandler(watchdog.events.PatternMatchingEventHandler):
def __init__(self, patterns=None, ignore_patterns=None, ignore_directories=False, case_sensitive=False):
super(MyHandler, self).__init__(patterns, ignore_patterns, ignore_directories, case_sensitive)
def on_created(self, event):
print(f"فایل ایجاد شد: {event.src_path}")
def on_deleted(self, event):
print(f"فایل حذف شد: {event.src_path}")
def on_modified(self, event):
print(f"فایل تغییر کرد: {event.src_path}")
def on_moved(self, event):
print(f"فایل جابجا شد: {event.src_path} به {event.dest_path}")
در این کد، کلاس MyHandler از کلاس PatternMatchingEventHandler ارثبری میکند. این کلاس به شما امکان میدهد الگوهایی را برای فیلتر کردن رویدادها مشخص کنید. متدهای on_created، on_deleted، on_modified و on_moved رویدادهای مربوطه را مدیریت میکنند و پیامهای مناسب را چاپ میکنند.
ایجاد یک Observer و شروع نظارت
حالا باید یک Observer ایجاد کنیم و Event Handler خود را به آن متصل کنیم. کد زیر را در نظر بگیرید:
if __name__ == "__main__":
event_handler = MyHandler()
observer = watchdog.observers.Observer()
observer.schedule(event_handler, path='.', recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
در این کد، ابتدا یک شیء از کلاس MyHandler ایجاد میکنیم. سپس یک Observer ایجاد میکنیم و با استفاده از متد schedule، Event Handler را به یک دایرکتوری خاص (در اینجا دایرکتوری فعلی) متصل میکنیم. آرگومان recursive=True به Observer میگوید که به صورت بازگشتی تمام زیردایرکتوریها را نیز نظارت کند. در نهایت، Observer را با استفاده از متد start شروع میکنیم. حلقه while True برنامه را در حال اجرا نگه میدارد تا Observer به نظارت خود ادامه دهد. در صورت فشار دادن Ctrl+C، حلقه متوقف میشود و Observer متوقف و به پایان میرسد.
فیلتر کردن رویدادها با الگوها
همانطور که اشاره شد، کلاس PatternMatchingEventHandler به شما امکان میدهد الگوهایی را برای فیلتر کردن رویدادها مشخص کنید. این کار میتواند برای کاهش حجم رویدادهایی که باید مدیریت کنید، مفید باشد. برای مثال، اگر فقط میخواهید رویدادهای مربوط به فایلهای با پسوند “.txt” را نظارت کنید، میتوانید کد خود را به صورت زیر تغییر دهید:
event_handler = MyHandler(patterns=["*.txt"])
در این کد، آرگومان patterns=["*.txt"] به سازنده MyHandler ارسال میشود. این به Observer میگوید که فقط رویدادهای مربوط به فایلهایی که پسوند “.txt” دارند را به Event Handler ارسال کند.
استفاده از Watchdog در پروژههای اتوماسیون
Watchdog میتواند در طیف گستردهای از پروژههای اتوماسیون مورد استفاده قرار گیرد. در اینجا چند مثال آورده شده است:
- پشتیبانگیری خودکار: میتوانید از Watchdog برای نظارت بر دایرکتوریهای مهم خود استفاده کنید و به محض ایجاد یا تغییر یک فایل، یک نسخه پشتیبان از آن تهیه کنید.
- همگامسازی فایلها: میتوانید از Watchdog برای همگامسازی فایلها بین دو یا چند دایرکتوری استفاده کنید. به محض تغییر یک فایل در یک دایرکتوری، تغییرات به دایرکتوریهای دیگر منتقل میشوند.
- اجرای اسکریپتها: میتوانید از Watchdog برای اجرای اسکریپتها پس از تغییر یک فایل خاص استفاده کنید. به عنوان مثال، میتوانید یک اسکریپت را اجرا کنید تا یک فایل را کامپایل کند یا یک وبسایت را بهروزرسانی کند.
- نظارت بر لاگها: میتوانید از Watchdog برای نظارت بر فایلهای لاگ استفاده کنید و به محض اضافه شدن یک خط جدید به فایل لاگ، یک اعلان دریافت کنید.
نکات پیشرفته
علاوه بر مفاهیم پایه، Watchdog ویژگیهای پیشرفتهتری نیز ارائه میدهد که میتوانید از آنها برای بهبود برنامههای خود استفاده کنید:
- استفاده از Threading: برای جلوگیری از مسدود شدن برنامه اصلی، میتوانید Event Handler خود را در یک thread جداگانه اجرا کنید.
- مدیریت خطاها: همیشه باید خطاها را در Event Handler خود مدیریت کنید تا از crash شدن برنامه جلوگیری کنید.
- بهینهسازی عملکرد: برای بهبود عملکرد، میتوانید از فیلتر کردن رویدادها و استفاده از الگوها استفاده کنید.
نتیجهگیری
Watchdog یک کتابخانه قدرتمند و انعطافپذیر برای نظارت بر فایلها در پایتون است. با استفاده از Watchdog، میتوانید برنامههایی ایجاد کنید که به صورت خودکار به تغییرات در سیستم فایل واکنش نشان میدهند. این کتابخانه میتواند در طیف گستردهای از پروژههای اتوماسیون مورد استفاده قرار گیرد و به شما کمک کند تا وظایف خود را به صورت کارآمدتر و خودکارتر انجام دهید.

بدون دیدگاه