Python / CLI хэрэгсэл бүтээх

CLI хэрэгсэл бүтээх

Та одоог хүртэл Python файлаа python script.py гэж ажиллуулж байлаа. Гэхдээ мэргэжлийн хэрэгслүүд командын мөрнөөс аргумент хүлээн авдаг — git commit -m "шинэ хичээл" эсвэл pip install requests шиг. Python-ийн стандарт argparse модуль яг тийм CLI (Command Line Interface) хэрэгсэл бүтээхэд хэрэглэгддэг.

argparse — командын мөрний аргумент

python
# мэндчилгээ.py
import argparse

parser = argparse.ArgumentParser(description="Хэрэглэгчийг мэндчилдэг хэрэгсэл")

# Заавал шаардагдах аргумент
parser.add_argument("нэр", help="Мэндчилэх хүний нэр")

# Сонголтот аргумент (--тугтай)
parser.add_argument("--удаа", type=int, default=1, help="Хэдэн удаа мэндчилэх")
parser.add_argument("--том", action="store_true",  help="Том үсгээр хэвлэх")

args = parser.parse_args()

мэндчилгээ = f"Сайн уу, {args.нэр}!"
if args.том:
    мэндчилгээ = мэндчилгээ.upper()

for _ in range(args.удаа):
    print(мэндчилгээ)

Командын мөрнөөс ажиллуулах:

bash
python мэндчилгээ.py Болд
# Сайн уу, Болд!

python мэндчилгээ.py Сарнай --удаа 3
# Сайн уу, Сарнай!
# Сайн уу, Сарнай!
# Сайн уу, Сарнай!

python мэндчилгээ.py Номин --том
# САЙН УУ, НОМИН!

python мэндчилгээ.py --help

--help тугийг argparse автоматаар бүртгэдэг — та тусад нь бичихгүйгээр гарын авлага бэлэн болно.

Практик CLI хэрэгсэл: файл тоолуур

python
# тоолуур.py
import argparse
from pathlib import Path

def файл_тоол(хавтас: Path, өргөтгөл: str, дэд_хавтас: bool) -> None:
    загвар = f"**/*.{өргөтгөл}" if дэд_хавтас else f"*.{өргөтгөл}"
    файлууд = list(хавтас.glob(загвар))

    if not файлууд:
        print(f"'{өргөтгөл}' өргөтгөлтэй файл олдсонгүй.")
        return

    нийт_хэмжээ = sum(f.stat().st_size for f in файлууд)

    print(f"\n{'Файл':<40} {'Хэмжээ':>10}")
    print("-" * 52)
    for файл in sorted(файлууд):
        хэмжээ = файл.stat().st_size
        print(f"{файл.name:<40} {хэмжээ:>8,} B")

    print("-" * 52)
    print(f"Нийт: {len(файлууд)} файл  |  {нийт_хэмжээ:,} байт\n")


parser = argparse.ArgumentParser(description="Хавтас доторх файлыг тоолно")
parser.add_argument("хавтас",     help="Хайх хавтас")
parser.add_argument("--өргөтгөл", default="py",       help="Файлын өргөтгөл (default: py)")
parser.add_argument("--бүгд",     action="store_true", help="Дэд хавтасуудаас ч хайх")

args = parser.parse_args()
хавтас = Path(args.хавтас)

if not хавтас.is_dir():
    print(f"Алдаа: '{хавтас}' хавтас олдсонгүй.")
else:
    файл_тоол(хавтас, args.өргөтгөл, args.бүгд)

Ажиллуулах:

bash
python тоолуур.py . --өргөтгөл md
python тоолуур.py /home/user/төсөл --өргөтгөл py --бүгд

Дэд команд (subcommands)

git-ийн git add, git commit шиг нэг хэрэгсэлд олон дэд команд нэмж болно:

python
# хэрэгсэл.py
import argparse

parser    = argparse.ArgumentParser(description="Файл удирдах хэрэгсэл")
дэд       = parser.add_subparsers(dest="команд")

# 'шинэ' дэд команд
шинэ_p = дэд.add_parser("шинэ", help="Шинэ файл үүсгэх")
шинэ_p.add_argument("нэр", help="Файлын нэр")

# 'жагсаа' дэд команд
жагсаа_p = дэд.add_parser("жагсаа", help="Файлуудыг жагсаах")
жагсаа_p.add_argument("--хавтас", default=".", help="Хавтас")

args = parser.parse_args()

if args.команд == "шинэ":
    from pathlib import Path
    Path(args.нэр).touch()
    print(f"'{args.нэр}' файл үүсгэлээ ✓")

elif args.команд == "жагсаа":
    from pathlib import Path
    хавтас = Path(args.хавтас)
    for файл in sorted(хавтас.iterdir()):
        төрөл = "📁" if файл.is_dir() else "📄"
        print(f"{төрөл} {файл.name}")

else:
    parser.print_help()
bash
python хэрэгсэл.py шинэ тайлан.txt
python хэрэгсэл.py жагсаа --хавтас /home/user

argparse нь стандарт library-д багтдаг тул нэмэлт суулгалт шаардахгүй. Гэхдээ илүү дэвшилтэт CLI хэрэгсэл бүтээхэд click, typer зэрэг гуравдагч талын library ч байдаг — хожим нь судалж болно.

Дараагийн хичээлд:

Design Patterns — програм хангамжийн инженерчлэлд байнга тохиолддог асуудлуудыг шийдэх батлагдсан загваруудыг Python дээр хэрхэн хэрэгжүүлэхийг сурна.