کتابخانه‌ی استاندارد · سیستم و ابزار

خط فرمان cli

برنامه‌های خط فرمان با چند دستور (مثل git commit)، و پرسیدن از کاربر.

واردسازی خط فرمان

بسیاری از ابزارها چند دستور دارند: salam build، salam run. بسته‌ی خط فرمان دستورها را ثبت می‌کند، از روی آرگومان اول می‌فهمد کدام خواسته شده و راهنمای کلی را می‌سازد. برای پرچم‌های هر دستور، بسته‌ی پرچم را کنارش به کار ببرید.

روال‌های درخواست و تایید از کاربر در پایانه چیزی می‌پرسند؛ نمونه‌شان اینجا اجرا نمی‌شود چون منتظر پاسخ می‌ماند.

گونه‌ها

برنامه App

ساختار برنامه
یک برنامه‌ی خط فرمان و دستورهایش.
نامانگلیسیگونهتوضیح
namenameرشته = ""نام برنامه.
descdescرشته = ""شرح برنامه.
versionversionرشته = ""نسخه‌ی برنامه.
cmd_namescmd_namesوکتور<رشته>نام دستورها.
cmd_descscmd_descsوکتور<رشته>شرح دستورها.
cli-Dispatch.salam
واردسازی خط فرمان
واردسازی رشته

روال اجرا کن(ب &: خط فرمان.برنامه، خط: رشته):
    آرگ := رشته.تفکیک کردن(خط، " ")
    د := خط فرمان.توزیع(ب، آرگ)
    اگر د == خط فرمان.دستور راهنما:
        سرچاپ "راهنما خواسته شد"
    وگرنه د == خط فرمان.دستور نسخه:
        سرچاپ "نسخه:", ب.version
    وگرنه د == خط فرمان.دستور نامشخص:
        سرچاپ "دستور ناشناخته"
    وگرنه:
        سرچاپ "اجرا:", د، خط فرمان.آرگومان‌های باقیمانده(آرگ)
    پایان
    آرگ.آزادکن()
پایان

روال ریشه:
    ناپایا ب := خط فرمان.جدید("salamctl"، "مدیریت پروژه"، "1.0.0")
    خط فرمان.ثبت(ب، "build"، "ساختن پروژه")
    خط فرمان.ثبت(ب، "test"، "اجرای آزمون‌ها")
    سرچاپ خط فرمان.دستور دارد(ب، "build")، خط فرمان.شرح دستور(ب، "test")
    هر خط در ["build --fast"، "--help"، "--version"، "deploy"]:
        اجرا کن(ب، خط)
    پایان
    چاپ خط فرمان.راهنما(ب)
پایان
خروجیtrue اجرای آزمون‌ها اجرا: build ["--fast"] راهنما خواسته شد نسخه: 1.0.0 دستور ناشناخته salamctl 1.0.0 مدیریت پروژه Usage: salamctl <command> [options] Commands: build ساختن پروژه test اجرای آزمون‌ها Run 'salamctl <command> --help' for help on a specific command.

پایاها و متغیرها

دستور راهنما CmdHelp

پایا دستور راهنما: رشته = "__help__"
نتیجه‌ی توزیع وقتی راهنما خواسته شده، یا هیچ آرگومانی نیامده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: cli-Dispatch.salam

دستور نسخه CmdVersion

پایا دستور نسخه: رشته = "__version__"
نتیجه‌ی توزیع وقتی نسخه خواسته شده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: cli-Dispatch.salam

دستور نامشخص CmdUnknown

پایا دستور نامشخص: رشته = "__unknown__"
نتیجه‌ی توزیع برای دستوری که ثبت نشده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: cli-Dispatch.salam

روال‌ها

جدید New

روال جدید(name: رشته، desc: رشته، version: رشته): برنامه
برنامه‌ای با نام، شرح و نسخه می‌سازد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: cli-Dispatch.salam

ثبت Register

روال ثبت(app &: برنامه، name: رشته، desc: رشته)
یک دستور را با شرحش ثبت می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: cli-Dispatch.salam

دستور دارد HasCommand

روال دستور دارد(app &: برنامه، name: رشته): منطقی
اگر دستور ثبت شده باشد، درست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: cli-Dispatch.salam

شرح دستور CommandDesc

روال شرح دستور(app &: برنامه، name: رشته): رشته
شرح یک دستور.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: cli-Dispatch.salam

توزیع Dispatch

روال توزیع(app &: برنامه، argv: وکتور<رشته>): رشته
از روی آرگومان اول می‌گوید کدام دستور خواسته شده. آرگومان‌ها را بدون نام برنامه بدهید. --help و --version خودکار شناخته می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: cli-Dispatch.salam

آرگومان‌های باقیمانده RemainingArgs

روال آرگومان‌های باقیمانده(argv: وکتور<رشته>): وکتور<رشته>
آرگومان‌ها به‌جز اولی (نام دستور)؛ برای دادن به بسته‌ی پرچم.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: cli-Dispatch.salam

راهنما Usage

روال راهنما(app &: برنامه): رشته
متن راهنمای کلی برنامه با فهرست دستورها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: cli-Dispatch.salam

الزامی بودن پرچم‌ها RequireFlags

روال الزامی بودن پرچم‌ها(fs &: flag.FlagSet، names: وکتور<رشته>): وکتور<رشته>
از میان نام‌های داده‌شده، پرچم‌هایی را برمی‌گرداند که در خط فرمان نیامده‌اند؛ برای پرچم‌های الزامی.
cli-RequireFlags.salam
واردسازی خط فرمان
واردسازی پرچم

روال ریشه:
    ناپایا پ := پرچم.جدید("deploy"، "")
    دیرکن پرچم.آزادسازی(پ)
    پرچم.افزودن رشته(پ، "host"، "h"، ""، "سرور")
    پرچم.افزودن رشته(پ، "user"، "u"، ""، "کاربر")
    ناپایا آرگ := وکتور {} برگردان وکتور<رشته>
    دیرکن آرگ.آزادکن()
    آرگ.بیفزا("--host=example.com")
    پرچم.تجزیه(پ، آرگ)
    ناپایا لازم := وکتور {} برگردان وکتور<رشته>
    دیرکن لازم.آزادکن()
    لازم.بیفزا("host")
    لازم.بیفزا("user")
    سرچاپ "جاافتاده:", خط فرمان.الزامی بودن پرچم‌ها(پ، لازم)
پایان
خروجیجاافتاده: ["user"]

تایید Confirm

روال تایید(question: رشته): منطقی
پرسشی بله/خیر می‌پرسد؛ پاسخ y یا yes درست است و هر چیز دیگری نادرست.
cli-Prompt.salam
واردسازی خط فرمان

روال ریشه:
    نام := خط فرمان.درخواست("نام پروژه: ")
    زبان := خط فرمان.درخواست با پیش فرض("زبان"، "فارسی")
    اگر خط فرمان.تایید("ساخته شود؟"):
        سرچاپ "ساختن", نام، "به", زبان
    پایان
پایان

درخواست Prompt

روال درخواست(question: رشته): رشته
پرسشی می‌پرسد و پاسخ کاربر را برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: cli-Prompt.salam

درخواست با پیش فرض PromptOr

روال درخواست با پیش فرض(question: رشته، def: رشته): رشته
مثل درخواست، ولی اگر کاربر چیزی ننویسد مقدار پیش‌فرض را برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: cli-Prompt.salam