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:
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:
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.
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 |
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:
sys.argvbilan bitta argument qabul qiluvchi dastur yozing;- argument berilmasa, tushunarli xabar chiqaring;
- xuddi shuni
argparsebilan qayta yozing; - bitta pozitsion va bitta ixtiyoriy argument qo’shing;
- dasturni
--helpbayrog’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
argparseishlating: tekshiruv, tur va yordam matni tayyor. - Pozitsion argument majburiy,
--bilan boshlanadigani ixtiyoriy. - Xatoni
sys.stderrga yozing vasys.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.