هر کاری یه اسکریپت پایتون داره - Python Cli

عکس از RealPython
عکس از RealPython

یکم داشتم بین مقاله‌های مختلف گشت میزدم تا رو یه موضوع جدید و چالشی برای خودم کار کنم و اگه چیز خوبی از آب دراومد اینجا با شما به اشتراک بذارم و بین همین جستجوها رسیدم به CLI که برام جالب بود. واسه همین بعد از یکم جستجو بیشتر دیدم که خب کتابخونه‌های خوبی در ارتباط باهاش برای پایتون نوشته شده تا بتونیم اسکریپت های خودمون رو با استفاده از CLI تو محیط سیستم عامل اجرا کنیم که شاید برای کسایی که به Command-line علاقه دارن تا حدودی جالب باشه.

اصن CLI چی هست ؟

این واژه که دقیقا میشه مخفف عبارت Command-line interface در واقع به شما کمک میکنه تا جدا از Shell Python اسکریپت مورد نظر خودتون رو با Command-line سیستم عامل اجرا کنید و به خروجی مد نظرتون برسید. حالا فرقش با اجرای معمولی اسکریپت چیه خب باید خدمتتون عرض کنم که شما اگر اسکریپت رو به صورت CLI نوشته باشید موقع اجرای برنامه خیلی راحت میتونید یه سری تنظیمات اولیه در هنگام اجرا تعریف کنید تا برنامه براساس تنظیمات CLI شما اجرا بشه برای مثال کد زیر رو در نظر بگیرید تا براتون توضیحش رو بدم :

https://gist.github.com/amirzenoozi/f2047e1e80b5d811c305ab6d2b5c8081

شما اگه کد بالا رو داخل فایلی به اسم cli.py ذخیره کنید و با استفاده از Command-Line سیستم خودتون یکی از دستورهای زیر رو اجرا کنید متوجه میشید که به همین راحتی یک CLI خیلی ساده به وسیله پایتون طراحی کردید و حالا اگه دوست داشته باشید میتونید تو پروژه های خودتون ازش استفاده کنید.

دستورات Command-Line برای اجرای کد
دستورات Command-Line برای اجرای کد

با اجرای یکی از دستورهای بالا اسکریپت شما اجرا میشه و عبارت "!Hello, World" روی صفحه به نمایش درمیاد که البته شما با عوض کردن پارامتر "!World" در دستورهای بالا میتونید به هر کی دوست دارید سلام بدید ?.

حالا یکم حرفه‌ای تر ادامه بدیم و چندتا از کتابخونه‌های معروف پایتون که برای این کار طراحی شده رو با هم بررسی کنیم و ببینیم هر کدوم به چه نحوه کار میکنن :

کتابخانه Click

این کتابخانه Syntax بسیار راحتی داره و به راحتی از طریق Package Manager پایتون یا همون Pip برای نصب در دسترسه از مزیت‌هاش به موارد زیر میشه اشاره کرد:

  • سازگاری با ویندوز ( برخی از کتابخانه‌ها در محیط ویندوز با محدودیت روبه‌رو هستند).
  • پشتیبانی از قابلیت Help که به شما کمک میکنه تا برای هر Command‌ یک توضیح در نظر بگیرید.
  • پشتیبانی از قبلیت محدودیت گذاری Type بر روی دستورات که به شما کمک میکنه تا کدی تمیزتر داشته باشید.

کتابخانه Argparse

https://gist.github.com/amirzenoozi/3b404a4ca004e19705f7e76371f898a8

قطعه کد بالا یک تابع جمع ساده است که در ورودی دو عدد رو به صورت پارامتر وارد میکنید و نتیجه جمع دو عدد رو در خروجی دریافت میکنید از مزایای این کتابخانه میتونم به موارد زیراشاره کنم:

دستورات Command-Line برای اجرای کد
دستورات Command-Line برای اجرای کد
  • نیاز به نصب این کتابخانه از طریق Pip نیست چون جزو کتابخانه‌های پیش فرض پایتون محسوب میشه.
  • مشابه به کتابخانه قبلی میتونید برای هر ورودی یک Type استاندارد در نظر بگیرید.
  • میتونید برای هر پارامتر یک مقدار Help تعریف کنید تا در صورت نیاز کاربر بتونه از توضیحات شما استفاده کنه.

کتابخانه PyInquirer

این کتابخونه یکم حرفه‌ای تر از دوتا کتابخونه قبلی هستش و امکانات بیشتری تحت Command-Line در اختیارتون قرار میده که برای مثال لیست چندتا از راه‌هایی که به شما اجاره میده تا دستوراتتون رو وارد کنید در پایین ذکر میکنم:

  • سوالات Yes / No که اگه از خط فرمان استفاده کنید حتما باهاشون برخورد کردید و به صورت Y\n بیشتر نمایش داده میشن
  • سوالات چند گزینه‌ای که کاربر میتونه از بین موارد لیست شده انتخاب کنه که این خودش چند نوع نحوه نمایش داره که تو Github خیلی بهتر و مفصل‌تر توضیح داده.
  • سولاتی با ورودی متن ساده که مثل همون Input ساده‌ای هست که داخل خود Shell پایتون استفاده میکنید.

راستی خیلی راحت میتونید از طریق Pip این کتابخونه رو نصب کنید و ازش استفاده کنید و برای مثال من یک قطعه کد برای سفارش پیتزا ? این زیر قرار میدم که تقریبا همه انواع دستورات این کتابخونه رو پشتیبانی میکنه و البته جزو مثال‌های اصلی مستندات خودش هم هست.

https://gist.github.com/amirzenoozi/ad7fe17dfd251c55806651acaa0bd9ab

کلام آخر

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

https://codeburst.io/building-beautiful-command-line-interfaces-with-python-26c7e1bb54df