สร้าง CLI ด้วย argparse
ทำสคริปต์ให้รับ argument จาก command line อย่างมืออาชีพ พร้อม --help อัตโนมัติ
สคริปต์ที่ดีควรรับค่าจากผู้ใช้ผ่าน command line ได้ เช่น python tool.py data.txt --verbose โมดูล argparse ช่วยจัดการ argument ให้เรียบร้อย พร้อมสร้างข้อความ help และตรวจชนิดข้อมูลให้อัตโนมัติ
sys.argv — วิธีดิบ
ก่อนรู้จัก argparse ลองดูวิธีดิบ: sys.argv คือ list ของ argument ที่ส่งมา (ตัวแรกคือชื่อไฟล์) — ใช้ได้แต่ต้องจัดการเองทุกอย่าง
import sys
print(sys.argv) # ['tool.py', 'data.txt', '--verbose']
# ต้องเช็คจำนวน, แปลงชนิด, ทำ help เองทั้งหมด — ยุ่งยากargparse — วิธีที่ใช้จริง
import argparse
parser = argparse.ArgumentParser(description="นับคำในไฟล์")
parser.add_argument("filename", help="ไฟล์ที่จะอ่าน") # positional
parser.add_argument("--upper", action="store_true", help="แปลงเป็นตัวใหญ่") # flag
parser.add_argument("--repeat", type=int, default=1, help="ทำซ้ำกี่ครั้ง") # มีค่า + ชนิด
args = parser.parse_args()
print(args.filename) # ค่าที่รับมา
print(args.upper) # True/False
print(args.repeat) # intpython tool.py data.txt --upper --repeat 3
# args.filename = 'data.txt', args.upper = True, args.repeat = 3--help ได้มาฟรี
argparse สร้าง --help ให้อัตโนมัติจากที่เราระบุ และตรวจชนิด/argument ที่ขาดให้ด้วย
python tool.py --help
# usage: tool.py [-h] [--upper] [--repeat REPEAT] filename
#
# นับคำในไฟล์
# positional arguments:
# filename ไฟล์ที่จะอ่าน
# options:
# --upper แปลงเป็นตัวใหญ่
# --repeat ทำซ้ำกี่ครั้งpositional (เช่น filename) จำเป็นต้องใส่และเรียงตามตำแหน่ง; optional (ขึ้นต้น --) ใส่หรือไม่ก็ได้; flag (action="store_true") เป็น True เมื่อใส่ False เมื่อไม่ใส่ — argparse จัดการ validate ชนิดและความครบให้หมด
สรุปหัวข้อนี้
- sys.argv คือ list ของ argument ดิบ — ใช้ได้แต่จัดการเองทุกอย่าง
- argparse: add_argument กำหนด positional / optional (--) / flag
- type= ตรวจชนิด, default= ค่าเริ่มต้น, action="store_true" ทำ flag
- ได้ --help และการ validate มาฟรี
1) เขียน CLI ที่รับชื่อไฟล์แล้วนับจำนวนบรรทัด 2) เพิ่ม flag --words เพื่อนับคำแทนบรรทัด 3) เพิ่ม --repeat type=int แล้วทำงานซ้ำตามจำนวน 4) รัน --help ดูข้อความที่ argparse สร้างให้