کتابخانه psutil در پایتون - دل و رودۀ رایانه رو بکش بیرون!!

سلام به همگی!!در این پست میخوایم درباره کتابخونه ی psutil صحبت کنیم!(همونطور که در عنوان پست دیده میشه، کارایی اش مشخصه)یعنی از اطلاعات CPU و Memory تا اطلاعات Sensors رو بهتون میده!!اطلاعات کامل رو میتونید در اینجا(PyPI) و اینجا(Github) و اینجا(Read the Docs) ببینید!!خوبه بدونید این کتابخونه علاوه بر پایتون برای زبان های Go و C و Rust و Nim هم هست!!(حالا نمیدونم اونجا ها هم با نام کتابخونه می شناسن یا نه...)نکته خیلی جالب و باحال اینه که این کتابخونه(در پایتون) cross-platform هست یعنی میتونید در چندین سیستم عامل ازش استفاده کنید:LinuxWindowsmacOSFreeBSD, OpenBSD, NetBSDSun SolarisAIXخب از بحث معرفی بگذریم!!در این پست علاوه بر معرفی این کتابخونه باحال میخوایم یه کارایی کاربردی اش رو با هم ببینیم!!اونم چیزی نیست جز؟جز؟جز؟ نمایش اطلاعات باتری(میزان شارژ و ...)خب شروع می نماییمَش:مرحله اول(نصب کتابخانه):خب!! خب که خب؟؟pip install psutilمرحله دوم(وارد کردن کتابخانه و دریافت اطلاعات اولیه):خب پس از خان اول میرسیم به اینجا که کتابخونه رو بندازیم تو فایل خودمون:import psutilبعدش هم به دریافت اطلاعات می پردازیم!!(باتری یه نوع سنسور محسوب میشه در این کتابخونه)battery = psutil.sensors_battery()اینجا ما اومدیم اطلاعات باتری رو ریختیم داخل متغیر battery و حالا اگه اونو print کنیم چی می بینیم؟>>> print(battery) # output: sbattery(percent=62, secsleft=<BatteryTime.POWER_TIME_UNLIMITED: -2>, power_plugged=True)در اینجا percent میزان شارژ، secsleft زمان تا پایان شارژ رایانه و power_plugged هم برای اینه که آیا رایانه توی شارژ هست یا نه!حالا زمانی که من این دستور رو زدم شارژم 62 درصد بوده و رایانه در حال شارژ هستش!!این نکته رو هم در نظر داشته باشین که وقتی رایانه به شارژ باشه زمان پایان شارژ رو نشون نمیده دیگه(آخه چطور رایانه در حال شارژ میخواد شارژش تموم شه!!)اگه رایانه در شارژ باشه <BatteryTime.POWER_TIME_UNLIMITED: -2> رو در خروجی می بینید!!حالا من شارژر رو جدا می کنم خروجی میشه اینجوری:>>> print(battery) # output: sbattery(percent=68, secsleft=4294967295, power_plugged=False)این بار می بینید که secsleft عوض شد و تبدیل به یک عدد شد!!(در ادامه میگم چطور اینو مثل یه زمان درست حسابی کنین) و همینطور power_plugged هم شد Falseمرحله سوم(تمیز کردن کد):خب منظور از تمیز کردن، اینه که برای هر داده یک متغیر بذاریم و یکم کد رو زیباتر کنیم:import psutil battery = psutil.sensors_battery() Battery_percentage = &quotBattery percentage : &quot + str(battery.percent) + &quot%&quot Power_plugged = &quotPower plugged : &quot + str(battery.power_plugged) Battery_left = &quotBattery left : &quot + str(battery.secsleft)اینجا در متغیر Battery_percentage ابتدای میزان شارژ یه Battery percentage و آخرش هم یه علامت % اضافه کردیمبقیه هم که معلومه!!مرحله چهارم(تبدیل زمان داده شده به زمان معمولی):اگه دقت کرده باشین فرمت زمانی که خود کتابخونه بهمون میده به ثانیه است!!یعنی ساعت و دقیقه (+ثانیه) رو به ثانیه تبدیل میکنه!!پس ما باید اونو یه مرحله ببریم عقب(یعنی ساعت و دقیقه و ثانیه رو جدا کنیم)برای اینکه کد زیبا تری داشته باشیم این کار رو در یک تابع انجام میدیم:def convertTime(seconds): minutes, seconds = divmod(seconds, 60) hours, minutes = divmod(minutes, 60) return &quot%d:%02d:%02d&quot % (hours, minutes, seconds)اینجا تابع ما یه ورودی میگیره که اونم ثانیه است!!در خط بعدی ما اومدیم در یک خط دو متغیر رو مقدار دهی کردیم(این یکی از ویژگی های باحال پایتونه) و مقدارشون هم با divmod مشخص شده!!جناب divmod یک تابع خیلی باکلاس و شیکه که به صورت پیش فرض در خود پایتون هست!!این تابع دو ورودی میگیره که میاد ورودی اول رو بر ورودی دوم تقسیم می کنه و سپس در یک تاپل به ترتیب خارج قسمت و باقی مانده رو بر می گردونه یعنی اینجوری:# divmod output: (Quotient, Remainder)حالا در خط اول کد خودمون، تابع، مقدار ثانیه(ورودی اول) رو تقسیم بر 60(ورودی دوم) می کنه و خارج قسمت رو به عنوان دقیقه و باقی مانده رو به عنوان ثانیه قرار میده!!(همونطور که همه ی ما در تبدیل ثانیه به دقیقه انجام میدیم)بعدش در خط دوم کد، تابع مقدار دقیقه(ورودی اول) رو تقسیم بر 60(ورودی دوم) می کنه و خارج قسمت رو به عنوان ساعت و باقی مانده رو به عنوان دقیقه قرار میده!!(همونطور که همه ی ما در تبدیل دقیقه به ساعت انجام میدیم)در نهایت در خط اخر تابع خودمون، میایم با دستور return مقدار جلوشو بر می گردونیم که مقدار جلوش:&quot%d:%02d:%02d&quot % (hours, minutes, seconds)هست!!(این یه طریقه برای نوشتن ساعت:دقیقه:ثانیه هست)خب حالا این تابع رو خیلی ساده میندازیم توی کدمون:import psutil def convertTime(seconds): minutes, seconds = divmod(seconds, 60) hours, minutes = divmod(minutes, 60) return &quot%d:%02d:%02d&quot % (hours, minutes, seconds) battery = psutil.sensors_battery() Battery_percentage = &quotBattery_percentage : &quot + str(battery.percent) + &quot%&quot Power_plugged = &quotPower_plugged : &quot + str(battery.power_plugged) Battery_left = &quotBattery_left : &quot + convertTime(battery.secsleft)اگه دقت کرده باشین خط اخر کد یه تکونی خورد:از:Battery_left = &quotBattery left : &quot + str(battery.secsleft)به:Battery_left = &quotBattery left : &quot + convertTime(battery.secsleft)تبدیل شد و دلیلش رو هم که قطعا می دونید!!خب این آموزشمون هم تموم شد...امیدوارم که براتون مفید بوده باشه!لایک و کامنت یادتون نره D:تا کُدی دیگر خدانگهدار :)