CLI dastur yozish

Shu paytgacha yozgan dasturlarimiz ma’lumotni input() orqali so’rar edi. Haqiqiy vositalar esa boshqacha ishlaydi: ular ma’lumotni ishga tushirish paytida oladi. Bu darsda shunday dastur — CLI yozamiz.

CLI nima

pip install requests yoki git commit -m "matn" buyruqlarini yozganingizda aynan CLI dasturlarni ishlatgan bo’lasiz.

CLI ning afzalligi — uni avtomatlashtirish oson. Dasturni boshqa skript ichidan chaqirish, jadval bo’yicha ishga tushirish yoki bir necha buyruqni ketma-ket bog’lash mumkin.

sys.argv — eng sodda usul

Python argumentlarni sys.argv ro’yxatida beradi:

Python

Muhim jihat: sys.argv[0] — har doim dastur nomi. Haqiqiy argumentlar birinchi indeksdan boshlanadi.

Argument berilmasa, dastur xato bilan to’xtaydi. Shuning uchun tekshirish zarur:

Python

argparse — to’g’ri yechim

sys.argv kichik vazifaga yaraydi, lekin argumentlar ko’payganda qiyinlashadi. Standart kutubxonadagi argparse bu ishni o’z zimmasiga oladi: argumentlarni tekshiradi, turlarga aylantiradi va yordam matnini o’zi yaratadi.

Python

E’tibor bering: type=int tufayli aylantirish avtomatik bajarildi.

Ikki turdagi argument

argparse da argumentlar ikki xil bo’ladi:

Tur Yozilishi Xususiyati
Pozitsion son Majburiy, tartibi muhim
Ixtiyoriy --daraja Shart emas, default qiymati bor
Python

action="store_true" — bayroq (flag) yaratadi: berilsa True, berilmasa False. Unga qiymat yozish shart emas.

To’liq misol

Endi hamma narsani birlashtiramiz. Quyidagi dastur matn faylidagi qatorlarni sanaydi — loyiha strukturasi darsidagi qoidalarga mos yozilgan:

# sanagich.py
import argparse
import sys
from pathlib import Path


def qatorlarni_sana(fayl_yoli, bosh_qatorlar):
    """Fayldagi qatorlar sonini qaytaradi."""
    matn = Path(fayl_yoli).read_text(encoding="utf-8")
    qatorlar = matn.splitlines()

    if not bosh_qatorlar:
        qatorlar = [q for q in qatorlar if q.strip()]

    return len(qatorlar)


def main():
    parser = argparse.ArgumentParser(
        description="Fayldagi qatorlar sonini hisoblaydi"
    )
    parser.add_argument("fayl", help="tekshiriladigan fayl yo'li")
    parser.add_argument(
        "--bosh", action="store_true", help="bo'sh qatorlarni ham sanash"
    )

    args = parser.parse_args()

    try:
        son = qatorlarni_sana(args.fayl, args.bosh)
    except FileNotFoundError:
        print(f"Xato: '{args.fayl}' fayli topilmadi", file=sys.stderr)
        sys.exit(1)

    print(f"{args.fayl}: {son} qator")


if __name__ == "__main__":
    main()

Ishlatish:

python sanagich.py matn.txt
python sanagich.py matn.txt --bosh
python sanagich.py -h

Amaliy mashq

O’z CLI vositangizni yozing:

  1. sys.argv bilan bitta argument qabul qiluvchi dastur yozing;
  2. argument berilmasa, tushunarli xabar chiqaring;
  3. xuddi shuni argparse bilan qayta yozing;
  4. bitta pozitsion va bitta ixtiyoriy argument qo’shing;
  5. dasturni --help bayrog’i bilan ishga tushiring.

argparse sizga qanday ishlarni avtomatik qilib berdi?

Qisqacha xulosa

  • CLI — terminal orqali, argumentlar bilan ishlaydigan dastur.
  • sys.argv — argumentlar ro’yxati; [0] dastur nomi, qolganlari argumentlar.
  • Argumentlar har doim matn bo’lib keladi.
  • Jiddiy dastur uchun argparse ishlating: tekshiruv, tur va yordam matni tayyor.
  • Pozitsion argument majburiy, -- bilan boshlanadigani ixtiyoriy.
  • Xatoni sys.stderr ga yozing va sys.exit(1) bilan chiqing.

Shu bilan Python bo’limining asosiy darslari yakunlandi. Endi bilimni amalda sinash uchun SQL yoki HTML/CSS bo’limlariga o’ting — ular Python bilan birga to’liq loyiha qurish imkonini beradi.

Bu dars foydali bo'ldimi?

marta ko'rildi