FA-TOOLS — Header Component

/* Global Styles for Responsiveness and Typography */
body {
font-family: ‘Vazirmatn’, sans-serif; /* یک فونت فارسی مناسب برای خوانایی */
line-height: 1.8;
color: #333;
margin: 0 auto;
padding: 0 15px; /* فضای داخلی برای صفحه نمایش‌های کوچک */
max-width: 1200px; /* حداکثر عرض برای صفحه نمایش‌های بزرگتر */
direction: rtl; /* برای پشتیبانی از زبان فارسی */
text-align: right; /* تراز راست برای متن */
}

/* Headings Styling – برای شبیه‌سازی رفتار ویرایشگر بلوک */
h1 {
font-size: 2.5em; /* اندازه فونت واکنش‌گرا */
font-weight: 800; /* خیلی ضخیم */
color: #1a2a3a;
margin-top: 1.5em;
margin-bottom: 0.8em;
text-align: center;
}

h2 {
font-size: 2em;
font-weight: 700; /* ضخیم */
color: #2b3a4a;
margin-top: 1.8em;
margin-bottom: 1em;
padding-bottom: 0.3em;
border-bottom: 2px solid #e0e0e0; /* خط زیرین ملایم */
}

h3 {
font-size: 1.5em;
font-weight: 600; /* نیمه‌ضخیم */
color: #3c4a5a;
margin-top: 1.5em;
margin-bottom: 0.8em;
}

/* Paragraphs and Lists */
p {
margin-bottom: 1em;
text-align: justify;
}

ul, ol {
margin-bottom: 1em;
padding-right: 25px; /* تنظیم برای RTL */
}
li {
margin-bottom: 0.5em;
}

/* Call to Action Box */
.cta-box {
background-color: #e6f7ff; /* آبی روشن */
border-right: 5px solid #007bff; /* حاشیه آبی سمت راست */
padding: 1.2em;
margin: 2em 0;
border-radius: 8px;
text-align: center;
box-shadow: 0 4px 8px rgba(0,0,0,0.05);
font-size: 1.1em;
}
.cta-box a {
color: #007bff;
text-decoration: none;
font-weight: bold;
}
.cta-box a:hover {
text-decoration: underline;
}
.cta-phone {
font-size: 1.2em;
font-weight: bold;
color: #dc3545; /* قرمز برای شماره تلفن */
display: block;
margin-top: 0.8em;
}

/* Info-graphic Box */
.infographic-box {
background-color: #f0fdf4; /* سبز بسیار روشن */
border: 2px solid #28a745; /* حاشیه سبز */
padding: 1.5em;
margin: 2.5em 0;
border-radius: 12px;
box-shadow: 0 6px 12px rgba(0,0,0,0.08);
overflow-x: auto; /* برای واکنش‌گرایی جدول */
}
.infographic-box h3 {
color: #28a745;
text-align: center;
margin-top: 0;
border-bottom: 1px dashed #28a745;
padding-bottom: 0.5em;
}
.infographic-table {
width: 100%;
border-collapse: collapse;
margin-top: 1em;
}
.infographic-table th, .infographic-table td {
border: 1px solid #c3e6cb;
padding: 10px 15px;
text-align: right;
vertical-align: top;
font-size: 0.95em;
}
.infographic-table th {
background-color: #e2fcdb;
font-weight: bold;
color: #1e7e34;
width: 30%; /* تنظیم عرض ستون برای تعادل بصری */
}
.infographic-table td {
background-color: #ffffff;
}
/* Unicode decorations for infographic */
.infographic-header-line {
color: #28a745;
text-align: center;
font-size: 1.1em;
margin-bottom: 0.5em;
}

/* Code Blocks */
pre {
background-color: #282c34; /* پس‌زمینه تیره برای کد */
color: #abb2bf;
padding: 1em;
border-radius: 8px;
overflow-x: auto; /* اسکرول افقی برای خطوط بلند */
font-family: ‘Fira Code’, ‘Cascadia Code’, ‘Consolas’, monospace; /* فونت Monospace */
font-size: 0.95em;
line-height: 1.5;
margin: 2em 0;
direction: ltr; /* برای نمایش صحیح کد لاتین */
text-align: left; /* تراز چپ برای کد */
}
code {
font-family: ‘Fira Code’, ‘Cascadia Code’, ‘Consolas’, monospace;
background-color: #e9ecef; /* خاکستری روشن برای کد درون خطی */
color: #c92c2c; /* مایل به قرمز برای کد درون خطی */
padding: 0.2em 0.4em;
border-radius: 4px;
font-size: 0.9em;
direction: ltr; /* برای نمایش صحیح کد لاتین */
text-align: left; /* تراز چپ برای کد */
}

/* Standard Educational Table */
.educational-table {
width: 100%;
border-collapse: collapse;
margin: 2em 0;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
background-color: #fff;
}
.educational-table th, .educational-table td {
border: 1px solid #dee2e6;
padding: 12px 15px;
text-align: right; /* RTL */
vertical-align: top;
}
.educational-table th {
background-color: #f8f9fa; /* سربرگ خاکستری روشن */
font-weight: bold;
color: #495057;
}
.educational-table tr:nth-child(even) {
background-color: #f2f2f2; /* راه‌راه گورخری */
}
.educational-table tr:hover {
background-color: #e9f5ff; /* افکت هاور */
}

/* Tip/Note Boxes */
.tip-box {
background-color: #f7faff; /* آبی روشن‌تر */
border-right: 4px solid #6c757d; /* حاشیه خاکستری سمت راست */
padding: 1em;
margin: 1.5em 0;
border-radius: 6px;
font-size: 0.95em;
color: #495057;
}
.tip-box strong {
color: #6c757d;
}

/* Links */
a {
color: #007bff;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}

/* Responsive Adjustments */
@media (max-width: 768px) {
h1 { font-size: 2em; }
h2 { font-size: 1.7em; }
h3 { font-size: 1.3em; }
body { padding: 0 10px; }
.cta-box, .infographic-box, pre, .educational-table {
margin: 1.5em 0;
padding: 1em;
}
.infographic-table th, .infographic-table td {
padding: 8px 10px;
font-size: 0.9em;
}
.educational-table th, .educational-table td {
padding: 10px;
}
}

آموزش ساخت CLI (رابط خط فرمان) با پایتون

رفیق برنامه‌نویس! دنبال ابزارهای خفن و کدهای آماده‌ای هستی که کارتو راه بندازه؟ یه سر به فروشگاه ابزارهای ما بزن، پشیمون نمیشی!
تماس: 09202232789

⚡ نقشه راه ساخت CLI با پایتون در یک نگاه ⚡

─── فهمیدنش آسونه، ساختنش از اونم راحت‌تر! ───

مرحله توضیحات کوتاه
1️⃣ مقدمه: CLI چیه؟ رابط کاربری متنی برای انجام وظایف با دستورات ساده. چرا با پایتون؟ سرعت، قدرت و کتابخانه‌های بی‌نظیر.
2️⃣ ابزارهای پایه (sys.argv) آشنایی با پایه و اساس دریافت آرگومان‌ها از خط فرمان. سادگی، اما محدودیت.
3️⃣ قدم حرفه‌ای‌تر (argparse) کتابخانه استاندارد پایتون برای مدیریت پیشرفته آرگومان‌ها، گزینه‌ها و دستورات فرعی.
4️⃣ قهرمان اصلی (Click) قوی‌ترین و محبوب‌ترین فریم‌ورک برای ساخت CLIs تمیز، کاربرپسند و با امکانات بالا. دکوراتورها کلید کارن.
5️⃣ بسته‌بندی و نصب (Packaging) چطور CLI خودتو به یه ابزار قابل نصب تبدیل کنی تا همه بتونن استفاده کنن.
6️⃣ عیب‌یابی سریع راه حل مشکلات رایج، از خطاهای آرگومان تا مسائل نصبی.

✨ شروع کن و ابزار خودتو بساز! ✨

سلام رفیق برنامه‌نویس! تا حالا شده دلت بخواد یه کاری رو توی سیستم‌عاملت با یه دستور ساده انجام بدی؟ مثلاً یه فایل رو با یه اسم خاص جابه‌جا کنی یا یه سری داده رو از وب بگیری و پردازش کنی؟ دقیقاً همینجاست که CLI (Command Line Interface) به کمکت میاد. CLI‌ها ابزارهای فوق‌العاده‌ای هستن که بهت این قدرت رو میدن تا با وارد کردن دستورات متنی، کارهای پیچیده رو به راحتی و سرعت بالا انجام بدی. اگه دنبال کدهای پایتون آماده می‌گردی یا می‌خوای مهارت‌های پایتونت رو یه پله بالاتر ببری، ساخت یه CLI با پایتون هم مفیده و هم خیلی هیجان‌انگیز!

پایتون با سادگی و قدرت مثال‌زدنیش، بهترین دوست تو برای ساخت اینجور ابزارهاست. از ابزارهای داخلی مثل sys.argv گرفته تا کتابخانه‌های قدرتمندی مثل argparse و غول این میدون، یعنی Click، پایتون همه چیز رو برات فراهم کرده. تو این مقاله قراره با هم از صفر تا صد یاد بگیریم چطور یه CLI تمیز، کاربردی و حرفه‌ای با پایتون بسازیم. پس بزن بریم که قراره کد بنویسیم و حال کنیم!

CLI چیه و چرا با پایتون؟

آموزش ساخت CLI (رابط خط فرمان) با پایتون — تصویر 1

قبل از اینکه بپریم توی کد، بیا یه نگاه بندازیم به اینکه اصلاً CLI چی هست و چرا پایتون اینقدر برای ساختش مناسبه. CLI یا Command Line Interface، یه رابط کاربریه که به جای کلیک کردن روی دکمه‌ها و پنجره‌ها، با نوشتن دستورات توی ترمینال یا Command Prompt با کامپیوترت ارتباط برقرار می‌کنی. حتماً دیدی که برنامه‌نویس‌ها توی فیلم‌ها با یه صفحه سیاه و خطوط کد کار می‌کنن؛ همون CLI هستش!

مزیتش چیه؟ سرعت فوق‌العاده، قابلیت اتوماسیون بی‌نظیر، و اینکه می‌تونی بدون نیاز به رابط گرافیکی سنگین، کارها رو انجام بدی. برای توسعه‌دهنده‌ها، مدیران سیستم، و هرکسی که با کارهای تکراری سروکار داره، CLI یه ناجی به تمام معناست.

چرا پایتون بهترین انتخاب برای CLI هست؟

خب، چرا پایتون؟ دلایلش خیلی واضحه و هر برنامه‌نویسی باهاش موافقه:

  1. سادگی و خوانایی: پایتون زبونیه که انگار داری انگلیسی می‌نویسی. این یعنی خیلی سریع می‌تونی کد بنویسی و از اون مهم‌تر، بقیه هم می‌تونن کدت رو بفهمن.
  2. اکوسیستم قدرتمند: پایتون یه عالمه کتابخونه آماده داره که کارتو حسابی راحت می‌کنه. از درخواست‌های HTTP گرفته تا پردازش متن و کار با فایل‌ها، همه چی در اسنیپت‌های آماده پایتون و جاهای دیگه هست.
  3. Cross-Platform: کدی که با پایتون می‌نویسی، روی ویندوز، مک، لینوکس و تقریباً هر سیستم‌عاملی اجرا میشه. دیگه نگران سازگاری نیستی.
  4. جامعه بزگ: هر مشکلی که بهش بربخوری، مطمئن باش یه نفر قبلاً باهاش دست و پنجه نرم کرده و جوابش توی اینترنت هست.

قدم اول: آشنایی با sys.argv (مبتدیانه ولی کاربردی)

آموزش ساخت CLI (رابط خط فرمان) با پایتون — تصویر 2

اولین و پایه‌ترین راه برای دریافت آرگومان‌ها در پایتون، استفاده از ماژول داخلی sys و متغیر sys.argv هست. این یه لیست از رشته‌هاست که آرگومان‌های خط فرمان رو بهت میده. اولین عنصر این لیست (sys.argv[0]) همیشه اسم خود اسکریپت پایتونته.

مثال عملی با sys.argv

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


# greet.py
import sys

def main():
    if len(sys.argv) < 3:
        print("استفاده: python greet.py <نام> <فامیل>")
        sys.exit(1) # کد خروج 1 به معنی خطا

    first_name = sys.argv[1]
    last_name = sys.argv[2]
    
    print(f"سلام، {first_name} {last_name}! خوش آمدید به دنیای CLI.")

if __name__ == "__main__":
    main()

حالا چطور اجراش می‌کنی؟


python greet.py علی حسینی

خروجی:


سلام، علی حسینی! خوش آمدید به دنیای CLI.

می‌بینی؟ خیلی سادس. ولی خب، sys.argv برای CLI‌های خیلی ساده خوبه. اگه بخوای گزینه‌های (Options) پیچیده (مثل --verbose یا -f)، دستورات فرعی (Subcommands) یا اعتبارسنجی (Validation) داشته باشی، دیگه به درد نمی‌خوره و کدت شلوغ و غیرقابل مدیریت میشه.

قدم حرفه‌ای‌تر: argparse (کتابخانه استاندارد پایتون)

آموزش ساخت CLI (رابط خط فرمان) با پایتون — تصویر 3

وقتی کارات پیچیده‌تر میشه و نیاز به پارامترهای اختیاری، مقادیر پیش‌فرض، پیام‌های راهنمایی (Help Messages) و انواع داده‌ای داری، argparse میاد وسط. این ماژول جزو کتابخانه استاندارد پایتونه و نیازی به نصب نداره. کار باهاش کمی بیشتر از sys.argv طول می‌کشه، اما نتیجه‌اش یه CLI منظم‌تر و کاربرپسندتره.

ساخت CLI با argparse: یه مثال برای مدیریت فایل

فرض کن می‌خوایم یه ابزار برای کپی کردن فایل‌ها بسازیم که هم مسیر مبدأ و هم مسیر مقصد رو از کاربر بگیره، و یه آپشن اختیاری --verbose برای نمایش اطلاعات بیشتر هم داشته باشه.


# file_copier.py
import argparse
import shutil
import os

def copy_file(source, destination, verbose=False):
    if not os.path.exists(source):
        print(f"خطا: فایل مبدأ '{source}' وجود ندارد.")
        return

    try:
        shutil.copy(source, destination)
        if verbose:
            print(f"فایل '{source}' با موفقیت به '{destination}' کپی شد.")
        else:
            print(f"'{source}' کپی شد.")
    except Exception as e:
        print(f"خطا در کپی فایل: {e}")

def main():
    parser = argparse.ArgumentParser(description="یک ابزار ساده برای کپی کردن فایل‌ها.")
    
    # آرگومان‌های موقعیتی (Positionals)
    parser.add_argument("source", help="مسیر فایل مبدأ")
    parser.add_argument("destination", help="مسیر فایل مقصد")
    
    # آرگومان‌های اختیاری (Optionals)
    parser.add_argument("-v", "--verbose", action="store_true", 
                        help="نمایش جزئیات بیشتر در حین عملیات")
    
    args = parser.parse_args()
    
    copy_file(args.source, args.destination, args.verbose)

if __name__ == "__main__":
    main()

برای اجرا کردنش:


# کپی ساده
python file_copier.py myfile.txt /tmp/newfile.txt

# کپی با جزئیات بیشتر
python file_copier.py myfile.txt /tmp/newfile.txt --verbose

# نمایش پیام راهنما
python file_copier.py --help

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

یه نکته کوچیک: اگه دنبال کدهای HTML یا CSS برای پروژه وب‌سایتت هستی، اونجا هم کلی اسنیپت کاربردی پیدا می‌کنی!

قهرمان اصلی: Click (فریم‌ورک مدرن و قدرتمند)

اگه می‌خوای یه CLI بسازی که واقعاً حرفه‌ای باشه، با دستورات فرعی (Subcommands) پیچیده، گزینه‌های متنوع و تجربه کاربری بی‌نظیر، باید با Click آشنا بشی. Click یه فریم‌ورک عالی از خانواده Flask هست که کار ساخت CLI رو به طرز باورنکردنی آسون و لذت‌بخش می‌کنه. برخلاف argparse، Click یه کتابخانه جانبیه و باید نصبش کنی.

نصب Click


pip install click

ساخت یه CLI چند دستوری با Click: ابزار مدیریت تسک‌ها

بیا یه CLI بسازیم که قابلیت اضافه کردن، حذف کردن و نمایش تسک‌ها رو داشته باشه. این یه مثال عالی از دستورات فرعیه.


# task_manager.py
import click

# یه لیست ساده برای ذخیره تسک‌ها (در واقعیت باید از دیتابیس یا فایل استفاده کنی)
tasks = []

@click.group()
def cli():
    """ابزار ساده مدیریت تسک‌ها."""
    pass

@cli.command()
@click.argument('task_name')
def add(task_name):
    """یه تسک جدید اضافه می‌کنه."""
    tasks.append(task_name)
    click.echo(f"تسک '{task_name}' اضافه شد.")

@cli.command()
@click.argument('task_id', type=int)
def remove(task_id):
    """تسک رو بر اساس ID حذف می‌کنه."""
    if 0 <= task_id < len(tasks):
        removed_task = tasks.pop(task_id)
        click.echo(f"تسک '{removed_task}' (ID: {task_id}) حذف شد.")
    else:
        click.echo(f"خطا: ID تسک '{task_id}' معتبر نیست.", err=True) # err=True برای چاپ در stderr

@cli.command()
@click.option('--all', is_flag=True, help='نمایش همه تسک‌ها، حتی خالی.')
def list(all):
    """همه تسک‌های موجود رو نمایش میده."""
    if not tasks and not all:
        click.echo("هیچ تسکی وجود ندارد. از دستور 'add' برای اضافه کردن استفاده کنید.")
    else:
        click.echo("تسک‌های شما:")
        for i, task in enumerate(tasks):
            click.echo(f"  {i}: {task}")

if __name__ == '__main__':
    cli()

حالا چطور باهاش کار کنی؟


# نمایش راهنمای اصلی
python task_manager.py --help

# اضافه کردن تسک
python task_manager.py add "خرید شیر"
python task_manager.py add "پروژه CLI رو تموم کن"

# نمایش تسک‌ها
python task_manager.py list

# حذف تسک
python task_manager.py remove 0 # تسک "خرید شیر" رو حذف می‌کنه

# نمایش راهنمای یک ساب‌کامند
python task_manager.py add --help

Click از دکوراتورها (Decorators) استفاده می‌کنه که کدت رو خیلی تمیز و خوانا می‌کنه. @click.group() برای تعریف گروه اصلی دستورات و @cli.command() برای تعریف دستورات فرعی. همچنین @click.argument() برای آرگومان‌های ضروری و @click.option() برای گزینه‌های اختیاری.

یکی از قابلیت‌های باحال Click اینه که خودش به طور خودکار پیام‌های راهنمایی و خطاهای معنی‌دار رو برات تولید می‌کنه. دیگه نیازی نیست نگران این باشی که کاربر چطور باید با ابزارت کار کنه.

مقایسه argparse و Click: کدوم بهتره؟

خب، حالا که با هر دوتاشون آشنا شدی، ممکنه بپرسی کدوم رو انتخاب کنم؟ حقیقت اینه که هر دو عالی هستن، اما برای سناریوهای مختلف. جدول زیر یه مقایسه سریع بهت میده:


ویژگی argparse Click
نیاز به نصب خیر (جزئی از پایتون) بله (pip install click)
سادگی/خوانایی کد متوسط، کمی boilerplate دارد. بالا، از دکوراتورها استفاده می‌کند.
پشتیبانی از Subcommands پشتیبانی می‌کند اما کدنویسیش پیچیده‌تر است. بسیار قدرتمند و آسان، هسته اصلی طراحی آن است.
تولید پیام راهنما اتوماتیک، اما کمتر قابل شخصی‌سازی. اتوماتیک و بسیار زیبا، قابلیت شخصی‌سازی بالا.
سناریوی استفاده CLI‌های تک‌دستوره یا ساده با چند گزینه. CLI‌های پیچیده با چندین دستور و گزینه‌های زیاد.

نتیجه‌گیری؟ برای پروژه‌های کوچیک و سریع، argparse کارتو راه میندازه. اما اگه میخوای یه ابزار قوی و آینده‌نگرانه بسازی، Click بهترین انتخابه. حالا که با Click آشنا شدی، اگه دنبال کدهای آماده جاوااسکریپت یا حتی اسنیپت‌های وردپرسی هستی، می‌تونی توی سایت ما کلی چیزای خوب پیدا کنی.

بسته‌بندی و نصب CLI (چطور ابزارت رو منتشر کنی)

ساختن CLI یه طرف داستانه، منتشر کردنش طرف دیگه. اگه می‌خوای بقیه هم بتونن از ابزارت استفاده کنن، باید اون رو به یه پکیج قابل نصب تبدیل کنی. این کار معمولاً با setuptools و فایل setup.py یا pyproject.toml انجام میشه.

ساخت setup.py برای CLI

فرض کن فایل task_manager.py رو ساختی. حالا یه فایل به اسم setup.py کنارش بساز:


# setup.py
from setuptools import setup, find_packages

setup(
    name='task_manager_cli',
    version='0.1.0',
    packages=find_packages(),
    include_package_data=True,
    install_requires=[
        'Click',
    ],
    entry_points={
        'console_scripts': [
            'taskman = task_manager:cli',
        ],
    },
    author='اسم شما',
    author_email='ایمیل شما@example.com',
    description='A simple CLI for task management with Python and Click.',
    long_description=open('README.md').read(),
    long_description_content_type='text/markdown',
    url='https://your-github-repo.com/task-manager', # آدرس گیت‌هاب یا وبسایت پروژه
    classifiers=[
        'Programming Language :: Python :: 3',
        'License :: OSI Approved :: MIT License',
        'Operating System :: OS Independent',
    ],
)

**توضیح فایل setup.py:**

  • name: اسم پکیجت که باهاش نصب میشه (مثلاً pip install task_manager_cli).
  • version: ورژن پکیج.
  • packages=find_packages(): پایتون رو می‌گرده و همه پکیج‌هاتو پیدا می‌کنه.
  • install_requires: لیست کتابخانه‌هایی که پروژه بهشون نیاز داره (مثل Click).
  • entry_points: **مهم‌ترین بخش برای CLI!** این بخش به setuptools میگه که وقتی کاربر پکیج رو نصب کرد، چه دستوری رو توی ترمینال براش قابل اجرا کنه.
    • 'console_scripts': اینجا مشخص می‌کنی که اسم دستور توی ترمینال چی باشه (مثلاً taskman).
    • 'task_manager:cli': یعنی برو توی فایل task_manager.py و آبجکت cli رو که با @click.group() تعریف کردی، اجرا کن.

نصب CLI توسعه داده شده

حالا برای نصب CLI خودت به صورت محلی (در حالت توسعه) می‌تونی توی همون پوشه که setup.py و task_manager.py هست، این دستور رو بزنی:


pip install -e .

آپشن -e (editable) باعث میشه تغییراتی که توی کد اصلی میدی، بدون نیاز به نصب دوباره، توی CLI هم اعمال بشه. بعد از نصب، می‌تونی مستقیم توی ترمینال بنویسی:


taskman add "تسک جدید"
taskman list

دیدید چقدر راحت شد؟ دیگه نیاز نیست هی با python task_manager.py ... سروکله بزنی!

عیب‌یابی سریع (Troubleshooting)

خب، هیچ مسیر برنامه‌نویسی بدون چالش نیست. اینم چندتا مشکل رایج که ممکنه تو ساخت CLI باهاش مواجه بشی و راه حلشون:

1. CLI بعد از نصب با pip install -e . پیدا نمیشه یا دستور کار نمی‌کنه.

راه حل:

  • محیط مجازی (Virtual Environment): مطمئن شو که توی محیط مجازی فعال داری نصب می‌کنی. اگه نه، ممکنه توی PATH سیستم اضافه نشه.
  • کش pip: بعضی وقتا pip کش می‌کنه. می‌تونی با pip cache purge کش رو پاک کنی و دوباره نصب کنی.
  • مسیر entry_points: فایل setup.py رو با دقت بررسی کن که entry_points رو درست نوشته باشی (مثلاً taskman = task_manager:cli). اسم فایل پایتون و اسم تابع/آبجکتی که گروه Click رو تعریف می‌کنه باید دقیق باشه.
  • ریستارت ترمینال: گاهی اوقات بعد از نصب، باید ترمینالت رو ببندی و دوباره باز کنی تا PATH سیستم به روز بشه.

2. خطای ModuleNotFoundError: No module named 'click'

راه حل:

  • نصب Click: مطمئن شو که Click رو نصب کردی: pip install click.
  • محیط مجازی: اگه توی محیط مجازی کار می‌کنی، مطمئن شو که توی همون محیط نصبش کردی. ممکنه توی محیط سراسری (global) نصب کرده باشی ولی محیط مجازی فعال باشه.

3. آرگومان‌ها یا گزینه‌ها به درستی دریافت نمیشوند.

راه حل:

  • نوع آرگومان (Type): توی Click و argparse، می‌تونی نوع آرگومان رو مشخص کنی (مثلاً type=int). اگه ورودی کاربر با اون نوع مطابقت نداشته باشه، خطا میده. دقت کن که ورودی‌ها درست تبدیل بشن.
  • ترتیب آرگومان‌ها: در argparse، ترتیب آرگومان‌های موقعیتی مهمه. در Click هم دکوراتور @click.argument برای آرگومان‌های موقعیتیه.
  • آپشن‌ها (Options) و آرگومان‌ها (Arguments): مطمئن شو که از -- برای آپشن‌ها و مقادیر مستقیم برای آرگومان‌ها استفاده می‌کنی.
  • پیام راهنما: همیشه با your_cli_command --help (یا python your_script.py --help) پیام راهنما رو چک کن. این بهترین راه برای فهمیدن اینکه CLI شما چه ورودی‌هایی رو انتظار داره، هست.

حرف آخر: ابزارهای خودتو بساز!

تبریک می‌گم! تو حالا دیگه اصول ساخت CLI با پایتون رو بلدی. از sys.argv ساده گرفته تا argparse و در نهایت Click قدرتمند، ابزارهای مختلفی در اختیارته. یاد گرفتی چطور آرگومان‌ها رو بگیری، گزینه‌ها رو تعریف کنی، دستورات فرعی بسازی و حتی چطور ابزارت رو بسته‌بندی کنی تا بقیه هم بتونن ازش استفاده کنن.

ساخت CLI نه تنها بهت کمک می‌کنه کارهاتو سریع‌تر و اتوماتیک انجام بدی، بلکه یه مهارت خیلی باارزش توی دنیای برنامه‌نویسیه. پس منتظر چی هستی؟ برو و ابزارهای خودتو بساز! دنیا پر از کارهاییه که میشه با یه CLI کوچیک و کارآمد، حسابی راحتشون کرد. اگه در طول راه به ابزارها و اسنیپت‌های بیشتر نیاز داشتی، ما همیشه در کنارتیم. موفق باشی رفیق!

Table of Contents

آخرین نوشته‌ها