استفاده از Typer برای ساخت رابط خط فرمان (CLI) در پایتون

استفاده از Typer برای ساخت رابط خط فرمان (CLI) در پایتون

در دنیای توسعه نرم‌افزار، رابط خط فرمان (CLI) ابزاری قدرتمند برای تعامل با برنامه‌ها و سیستم‌ها است. پایتون، با انعطاف‌پذیری و کتابخانه‌های غنی خود، بستری عالی برای ساخت CLIهای کارآمد و کاربرپسند فراهم می‌کند. در این مقاله، به بررسی کتابخانه Typer می‌پردازیم، یک کتابخانه مدرن و آسان برای استفاده که فرآیند ساخت CLI را به شدت ساده می‌کند. این مقاله در دسته ‘کتابخانه‌های خاص و کاربردی’ در آموزش پایتون قرار می‌گیرد و هدف آن ارائه یک راهنمای جامع و عملی برای استفاده از Typer است.

مقدمه‌ای بر Typer

Typer یک کتابخانه پایتون است که بر پایه تایپ‌هینت‌ها (Type Hints) ساخته شده است. این ویژگی به Typer اجازه می‌دهد تا به طور خودکار رابط کاربری CLI را از کد پایتون شما تولید کند. به عبارت دیگر، شما فقط باید منطق برنامه خود را بنویسید و Typer به طور خودکار پارامترها، گزینه‌ها و دستورات را برای CLI شما تعریف می‌کند. این رویکرد، توسعه CLI را سریع‌تر، آسان‌تر و کم‌خطاتر می‌کند.

نصب Typer

نصب Typer بسیار ساده است و می‌توانید از pip، مدیر بسته پایتون، برای این کار استفاده کنید:

pip install typer

همچنین، برای بهره‌مندی از تکمیل خودکار دستورات در ترمینال، می‌توانید Typer را با استفاده از دستور زیر نصب کنید:

pip install "typer[all]"

ساخت اولین CLI با Typer

بیایید با یک مثال ساده شروع کنیم. یک CLI بسازیم که یک نام را به عنوان ورودی دریافت کند و یک پیام خوشامدگویی را چاپ کند:

import typer

app = typer.Typer()

@app.command()
def main(name: str):
    """
    این برنامه یک پیام خوشامدگویی را چاپ می‌کند.
    """
    typer.echo(f"سلام، {name}!")

if __name__ == "__main__":
    app()

در این کد:

  • `import typer` کتابخانه Typer را وارد می‌کند.
  • `app = typer.Typer()` یک نمونه از برنامه Typer ایجاد می‌کند.
  • `@app.command()` یک دکوراتور است که تابع `main` را به عنوان یک دستور CLI ثبت می‌کند.
  • `name: str` یک پارامتر ورودی با نوع رشته را تعریف می‌کند.
  • `typer.echo()` یک تابع است که متن را در ترمینال چاپ می‌کند.
  • `if __name__ == “__main__”: app()` برنامه را اجرا می‌کند.

برای اجرای این برنامه، فایل را ذخیره کنید (مثلاً `hello.py`) و در ترمینال دستور زیر را وارد کنید:

python hello.py --help

این دستور، راهنمای استفاده از برنامه را نمایش می‌دهد. برای اجرای برنامه با یک نام خاص، دستور زیر را وارد کنید:

python hello.py علی

این دستور، پیام “سلام، علی!” را در ترمینال چاپ می‌کند.

تعریف گزینه‌ها (Options)

علاوه بر پارامترهای ورودی، می‌توانید گزینه‌هایی را نیز برای CLI خود تعریف کنید. گزینه‌ها معمولاً برای تنظیم رفتار برنامه استفاده می‌شوند. برای تعریف یک گزینه، از دکوراتور `@app.option()` استفاده کنید:

import typer

app = typer.Typer()

@app.command()
def main(name: str, repeat: int = 1):
    """
    این برنامه یک پیام خوشامدگویی را تکرار می‌کند.
    """
    for _ in range(repeat):
        typer.echo(f"سلام، {name}!")

if __name__ == "__main__":
    app()

در این کد:

  • `repeat: int = 1` یک گزینه با نام `repeat` و نوع عدد صحیح را تعریف می‌کند. مقدار پیش‌فرض این گزینه 1 است.

برای اجرای این برنامه با یک مقدار خاص برای گزینه `repeat`، دستور زیر را وارد کنید:

python hello.py علی --repeat 3

این دستور، پیام “سلام، علی!” را سه بار در ترمینال چاپ می‌کند.

تعریف زیردستورات (Subcommands)

برای برنامه‌های پیچیده‌تر، می‌توانید از زیردستورات استفاده کنید. زیردستورات به شما امکان می‌دهند تا برنامه خود را به بخش‌های منطقی تقسیم کنید. برای تعریف یک زیردستور، از دکوراتور `@app.command()` در داخل یک تابع دیگر استفاده کنید:

import typer

app = typer.Typer()

@app.command()
def add(x: float, y: float):
    """
    این دستور دو عدد را جمع می‌کند.
    """
    typer.echo(x + y)

@app.command()
def subtract(x: float, y: float):
    """
    این دستور دو عدد را تفریق می‌کند.
    """
    typer.echo(x - y)

if __name__ == "__main__":
    app()

در این کد:

  • `add` و `subtract` دو زیردستور هستند.

برای اجرای دستور `add`، دستور زیر را وارد کنید:

python calculator.py add 5 3

این دستور، نتیجه 8 را در ترمینال چاپ می‌کند. برای اجرای دستور `subtract`، دستور زیر را وارد کنید:

python calculator.py subtract 5 3

این دستور، نتیجه 2 را در ترمینال چاپ می‌کند.

استفاده از تایپ‌هینت‌ها

Typer به شدت به تایپ‌هینت‌ها وابسته است. استفاده از تایپ‌هینت‌ها به Typer کمک می‌کند تا نوع داده‌های ورودی را تشخیص دهد و رابط کاربری CLI را به طور خودکار تولید کند. همچنین، تایپ‌هینت‌ها به شما کمک می‌کنند تا خطاهای احتمالی را در کد خود زودتر شناسایی کنید.

می‌توانید از انواع داده‌های مختلف پایتون به عنوان تایپ‌هینت استفاده کنید، مانند `str`، `int`، `float`، `bool`، `list`، `dict` و غیره. همچنین، می‌توانید از انواع داده‌های سفارشی خود نیز استفاده کنید.

اعتبارسنجی ورودی

Typer به شما امکان می‌دهد تا ورودی‌های کاربر را اعتبارسنجی کنید. می‌توانید از تایپ‌هینت‌ها برای تعیین نوع داده‌های ورودی استفاده کنید. همچنین، می‌توانید از توابع اعتبارسنجی سفارشی نیز استفاده کنید.

برای مثال، می‌توانید از تایپ‌هینت `typer.File()` برای اعتبارسنجی اینکه یک ورودی یک فایل معتبر است استفاده کنید:

import typer

app = typer.Typer()

@app.command()
def process_file(file: typer.File()):
    """
    این دستور محتویات یک فایل را پردازش می‌کند.
    """
    content = file.read()
    typer.echo(f"محتویات فایل: {content}")

if __name__ == "__main__":
    app()

نتیجه‌گیری

Typer یک کتابخانه قدرتمند و آسان برای استفاده است که فرآیند ساخت CLI در پایتون را به شدت ساده می‌کند. با استفاده از Typer، می‌توانید به سرعت و به آسانی CLIهای کارآمد و کاربرپسند ایجاد کنید. این کتابخانه با بهره‌گیری از تایپ‌هینت‌ها، اعتبارسنجی ورودی و امکان تعریف گزینه‌ها و زیردستورات، ابزاری ارزشمند برای هر توسعه‌دهنده پایتون است که به دنبال ساخت CLI است.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *