احمد رضا سرخیل
احمد رضا سرخیل
خواندن ۳ دقیقه·۵ سال پیش

مدیریت فایلها از راه دور با پایتون

صورت مساله: یه برنامه ی سازمانی دارم که ویندوز سرویس استاندارد نیست و باید دائما در حال اجرا باشه و برخی اوقات نیاز به مانیتورینگ توسط داره به محض اینکه به اخطاری بخوره شروع می کنه داخل شاخه خروجی هر یک ثانیه یک فایل 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مقدار دهی می کنیم

هر \ کارکتر بعدی خود را خنثی می کند یعنی برای نوشتن دو \ پشت سر هم باید 4 تا \ قرار دهید
هر \ کارکتر بعدی خود را خنثی می کند یعنی برای نوشتن دو \ پشت سر هم باید 4 تا \ قرار دهید

یه حلقه دیگه ایجاد می کنیم تا با مسیر داده شده و با کمک کتابخانه osشروع به پیمایش مسیر و پیدا کردن فایل میکنه، در نامگذاری حروف اختصاری استفاده شده به ترتیب زیر است:

R=root , d=directories , f=files
R=root , d=directories , f=files

حلقه دیگری برای پیمایش فایلهای داخل هر فولدر نیاز داریم

حالا مسیر فایل و اسمش رو به متد stat از کتابخانه osمیدهیم و وضعیت فایل رو داخل یک متغیر میریزیم اطلاعات زیادی رو به ما برمیگردونه. میتونید به صورت جداگانه print بگیرید ازش و مقادیری که برمیگردونه رو مشاهده کنید

از مقادیر قبلی برای مثال فعلی فقط حجم فایل رو لازم داریم که با این خط کد اون رو جدا می کنیم و چک میکنیم با سایز مورد نظر اگر فایل شامل این شر می شد اون رو به آرایه ایی از اسم و مسیر فایل منتقل می کنیم تا در انتها پاکش کنیم

حلقه ایی ایجاد می کنیم و لیست فایلهای منتظر برای حذف رو یکی یکی پیمایش وآن را پاک میکنیم

در انتها کد کامل به همراه تولید log در قالب فایل txt رو براتون قرار میدم

https://github.com/ars1364/PythonerizationBoringStuff/blob/master/ManagingFileRemotely.py

نمونه فایل config شامل لیستی از IPسروها و مسیر فولدری که فایلها داخل اون هستند

تبدیل برنامه به فایل exe:

انتقال فایلها بر روی سرور در یک فولدر کنار هم و سپس اجرای برنامه





pythondevops
من را در لینکدین دنبال کنید : https://www.linkedin.com/in/ahmad-reza-sarkhail-43588695
شاید از این پست‌ها خوشتان بیاید