CLI хэрэгсэл бүтээх
Та одоог хүртэл Python файлаа python script.py гэж ажиллуулж байлаа. Гэхдээ мэргэжлийн хэрэгслүүд командын мөрнөөс аргумент хүлээн авдаг — git commit -m "шинэ хичээл" эсвэл pip install requests шиг. Python-ийн стандарт argparse модуль яг тийм CLI (Command Line Interface) хэрэгсэл бүтээхэд хэрэглэгддэг.
argparse — командын мөрний аргумент
# мэндчилгээ.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(мэндчилгээ)
Командын мөрнөөс ажиллуулах:
python мэндчилгээ.py Болд
# Сайн уу, Болд!
python мэндчилгээ.py Сарнай --удаа 3
# Сайн уу, Сарнай!
# Сайн уу, Сарнай!
# Сайн уу, Сарнай!
python мэндчилгээ.py Номин --том
# САЙН УУ, НОМИН!
python мэндчилгээ.py --help
--help тугийг argparse автоматаар бүртгэдэг — та тусад нь бичихгүйгээр гарын авлага бэлэн болно.
Практик CLI хэрэгсэл: файл тоолуур
# тоолуур.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.бүгд)
Ажиллуулах:
python тоолуур.py . --өргөтгөл md
python тоолуур.py /home/user/төсөл --өргөтгөл py --бүгд
Дэд команд (subcommands)
git-ийн git add, git commit шиг нэг хэрэгсэлд олон дэд команд нэмж болно:
# хэрэгсэл.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()
python хэрэгсэл.py шинэ тайлан.txt
python хэрэгсэл.py жагсаа --хавтас /home/user
argparse нь стандарт library-д багтдаг тул нэмэлт суулгалт шаардахгүй. Гэхдээ илүү дэвшилтэт CLI хэрэгсэл бүтээхэд click, typer зэрэг гуравдагч талын library ч байдаг — хожим нь судалж болно.
Дараагийн хичээлд:
Design Patterns — програм хангамжийн инженерчлэлд байнга тохиолддог асуудлуудыг шийдэх батлагдсан загваруудыг Python дээр хэрхэн хэрэгжүүлэхийг сурна.