صورت مساله: یه برنامه ی سازمانی دارم که ویندوز سرویس استاندارد نیست و باید دائما در حال اجرا باشه و برخی اوقات نیاز به مانیتورینگ توسط داره به محض اینکه به اخطاری بخوره شروع می کنه داخل شاخه خروجی هر یک ثانیه یک فایل 1 کیلوبایتی تولید میکنه(درخواست دادم تیم نرم افزار درستش کنه ولی هنوز نشده J، بماند !) میتونید حدس بزنید که اگر 1 ساعت دیر برسم سراغش چه اتفاقی سر سرور و فولدر و غیره میاد.
راه حل: چند خط کد پایتون، کلاینتی که از طریق شبکه به همه سرورهام دسترسی داشته باشه ،لیست سرورها و شاخه ایی که فایلها داخل اون نگهداری میشوند
چی یاد میگیریم؟: 1- خواندن تنظیمات از روی فایل CSV 2- دسترسی به فایلها و فولدرها از راه دور 3- بدست آوردن متاداده های فایل 4- حذف فایل از راه دور
این چند خط کد پایتونی که در موردش صحبت کردیم:
import os, csv finalFilesToRemove = [] with open('confFile.csv', 'r', newline='') as confFile: fileReader = csv.reader(confFile, delimiter='|') for row in fileReader: filePath = '\\\\{0}\\{1}\\'.format(row[0], row[1]) for r, d, f in os.walk(filePath): for file in f: fileStat = os.stat(os.path.join(r, file)) if fileStat.st_size < 1024: finalFilesToRemove.append(os.path.join(r, file)) for f in finalFilesToRemove: os.remove(f)
توضیح کد:
یک آرایه خالی تعریف می کنیم بیرون حلقه Forتا بتونیم تو تمام طول برنامه ازش بهره ببریم
فایل Config رو به صورت Readonlyباز می کنیم و اسمش رو میذاریم confFile
به کمک کتابخانه csv ،فایل باز شده رو Parsمیکنیم fileReader
حلقه ای تعریف می کنیم تا به تعداد سطرهای فایل csv ما تکرار شه
مسیر فایل رو تعریف میکنیم به این صورت که ابتدا مسیر ثابت رو مینویسیم و مقادیر متغیر و با عدد علامت گذاری می کنیم و بیرون “اونها رو با سطرهای فایل configمقدار دهی می کنیم
یه حلقه دیگه ایجاد می کنیم تا با مسیر داده شده و با کمک کتابخانه osشروع به پیمایش مسیر و پیدا کردن فایل میکنه، در نامگذاری حروف اختصاری استفاده شده به ترتیب زیر است:
حلقه دیگری برای پیمایش فایلهای داخل هر فولدر نیاز داریم
حالا مسیر فایل و اسمش رو به متد stat از کتابخانه osمیدهیم و وضعیت فایل رو داخل یک متغیر میریزیم اطلاعات زیادی رو به ما برمیگردونه. میتونید به صورت جداگانه print بگیرید ازش و مقادیری که برمیگردونه رو مشاهده کنید
از مقادیر قبلی برای مثال فعلی فقط حجم فایل رو لازم داریم که با این خط کد اون رو جدا می کنیم و چک میکنیم با سایز مورد نظر اگر فایل شامل این شر می شد اون رو به آرایه ایی از اسم و مسیر فایل منتقل می کنیم تا در انتها پاکش کنیم
حلقه ایی ایجاد می کنیم و لیست فایلهای منتظر برای حذف رو یکی یکی پیمایش وآن را پاک میکنیم
در انتها کد کامل به همراه تولید log در قالب فایل txt رو براتون قرار میدم
https://github.com/ars1364/PythonerizationBoringStuff/blob/master/ManagingFileRemotely.py
نمونه فایل config شامل لیستی از IPسروها و مسیر فولدری که فایلها داخل اون هستند
تبدیل برنامه به فایل exe:
انتقال فایلها بر روی سرور در یک فولدر کنار هم و سپس اجرای برنامه