คู่มือ argparse: วิธีสร้าง CLI Tool ด้วย Python อย่างมืออาชีพ

目次

1. argparse คืออะไร? วิธีใช้งานเบื้องต้นใน Python

argparse คืออะไร

argparse เป็นไลบรารีมาตรฐานของ Python ที่ใช้สำหรับจัดการอาร์กิวเมนต์จากคอมมานด์ไลน์ ช่วยให้โปรแกรมสามารถรับและวิเคราะห์ค่าที่ผู้ใช้ระบุขณะเรียกใช้งานผ่านคอมมานด์ไลน์ ทำให้ปรับเปลี่ยนพฤติกรรมของโปรแกรมได้อย่างยืดหยุ่น เช่น การระบุ path ของไฟล์หรือออปชั่นต่าง ๆ ผ่านคอมมานด์ไลน์ เพื่อสร้างเครื่องมือ CLI ที่ใช้งานง่าย

import argparse

parser = argparse.ArgumentParser(description="โปรแกรมจัดการไฟล์")
parser.add_argument("input_file", help="ระบุ path ของไฟล์ที่ต้องการจัดการ")
args = parser.parse_args()

print(f"ไฟล์ที่ต้องการจัดการคือ: {args.input_file}")

ในโค้ดนี้ จะรับค่า path ของไฟล์จากคอมมานด์ไลน์ผ่าน input_file และแสดงผล โดยใช้ add_argument เพื่อกำหนดอาร์กิวเมนต์ และ parse_args() เพื่อประมวลผลอาร์กิวเมนต์นั้นอย่างง่ายดาย

2. ทำไมต้องใช้ argparse: ตัวเลือกที่เหมาะสมสำหรับ CLI Tools

CLI Tools คืออะไร?

CLI Tools หมายถึงโปรแกรมที่สามารถใช้งานผ่านคอมมานด์ไลน์ เหมาะกับงานบริหารระบบ ประมวลผลข้อมูล หรือการอัตโนมัติ เมื่อเขียน CLI Tools ด้วย Python argparse จะช่วยให้การรับและประมวลผลอาร์กิวเมนต์เป็นเรื่องง่าย ทั้งยังสร้างข้อความช่วยเหลือและจัดการข้อผิดพลาดอัตโนมัติอีกด้วย

ข้อดีของ argparse

  • กำหนดอาร์กิวเมนต์ได้ยืดหยุ่น: เพิ่มอาร์กิวเมนต์แบบบังคับหรือออปชั่นเสริมได้ง่าย ทำให้โปรแกรมใช้งานสะดวก
  • จัดการข้อผิดพลาดอัตโนมัติ: หากอาร์กิวเมนต์ไม่ครบหรือค่าไม่ถูกต้อง argparse จะขึ้นข้อความผิดพลาดอัตโนมัติ
  • ข้อความช่วยเหลือ (Help): argparse มี --help ให้โดยอัตโนมัติ ทำให้ผู้ใช้ดูวิธีใช้งานได้อย่างรวดเร็ว

ตัวอย่างต่อไปนี้เป็นการแสดงวิธีใช้เครื่องมือผ่าน --help:

$ python script.py --help
usage: script.py [-h] input_file

positional arguments:
  input_file  ไฟล์ที่ต้องการจัดการ

optional arguments:
  -h, --help  แสดงข้อความช่วยเหลือและออกจากโปรแกรม

 

年収訴求

3. โครงสร้างพื้นฐานของ argparse: อธิบายทีละขั้นตอน

การสร้าง ArgumentParser

ก่อนจะวิเคราะห์อาร์กิวเมนต์ ต้องสร้างอ็อบเจกต์ ArgumentParser เพื่อระบุคำอธิบายและวิธีใช้งานโปรแกรม

parser = argparse.ArgumentParser(description="โปรแกรมจัดการไฟล์")

การเพิ่มอาร์กิวเมนต์

ถัดไปใช้ add_argument() เพื่อเพิ่มอาร์กิวเมนต์ กำหนดได้ว่าจะเป็นแบบบังคับหรือออปชั่น พร้อมใส่คำอธิบายด้วย help

parser.add_argument("input_file", type=str, help="กรุณาระบุไฟล์ที่จะใช้")
parser.add_argument("--verbose", action="store_true", help="เปิดโหมดแสดงผลละเอียด")

การวิเคราะห์อาร์กิวเมนต์

สุดท้าย ใช้ parse_args() เพื่อแปลงข้อมูลจากคอมมานด์ไลน์เป็นอ็อบเจกต์ args

args = parser.parse_args()

4. ตัวอย่าง: โปรแกรม Python ง่าย ๆ ที่ใช้ argparse

ตัวอย่างพื้นฐาน

ด้านล่างนี้คือตัวอย่างการสร้าง CLI Tools ที่รับชื่อไฟล์และออปชั่นแสดงผลแบบละเอียด

import argparse

parser = argparse.ArgumentParser(description="โปรแกรมจัดการไฟล์")
parser.add_argument("file", help="ระบุ path ของไฟล์")
parser.add_argument("--verbose", action="store_true", help="เปิดโหมดแสดงผลละเอียด")

args = parser.parse_args()

if args.verbose:
    print(f"กำลังประมวลผลไฟล์ '{args.file}' ในโหมดละเอียด")
else:
    print(f"กำลังประมวลผลไฟล์ '{args.file}'")

โปรแกรมนี้ใช้ --verbose เพื่อสลับระหว่างโหมดละเอียดและโหมดปกติ

5. ฟีเจอร์น่ารู้ของ argparse

อาร์กิวเมนต์ที่เลือกใช้อย่างใดอย่างหนึ่ง (Mutually Exclusive Arguments)

เป็นการกำหนดให้อาร์กิวเมนต์บางตัวไม่สามารถใช้พร้อมกัน เช่น --foo และ --bar

parser = argparse.ArgumentParser(description="ตัวอย่าง mutually exclusive arguments")
group = parser.add_mutually_exclusive_group()
group.add_argument("--foo", action="store_true", help="เปิดใช้งาน foo")
group.add_argument("--bar", action="store_true", help="เปิดใช้งาน bar")

args = parser.parse_args()

ซับคอมมานด์ (Subcommands)

ซับคอมมานด์ช่วยให้โปรแกรมมีหลายฟังก์ชัน เช่น install หรือ uninstall ภายในโปรแกรมเดียว

parser = argparse.ArgumentParser(description="ตัวอย่าง subcommand")
subparsers = parser.add_subparsers(dest="command")

install_parser = subparsers.add_parser('install')
install_parser.add_argument('package', help="ชื่อแพ็คเกจที่จะติดตั้ง")

uninstall_parser = subparsers.add_parser('uninstall')
uninstall_parser.add_argument('package', help="ชื่อแพ็คเกจที่จะถอนการติดตั้ง")

args = parser.parse_args()

if args.command == "install":
    print(f"กำลังติดตั้งแพ็คเกจ {args.package}")
elif args.command == "uninstall":
    print(f"กำลังถอนการติดตั้งแพ็คเกจ {args.package}")

6. การจัดการข้อผิดพลาดและดีบักใน argparse

ข้อความผิดพลาดอัตโนมัติ

argparse จะสร้างข้อความผิดพลาดอัตโนมัติเมื่ออาร์กิวเมนต์ไม่ครบหรือไม่ถูกต้อง

$ python script.py
usage: script.py [-h] --input INPUT
script.py: error: the following arguments are required: --input

ข้อความผิดพลาดแบบกำหนดเอง

บางกรณีอาจต้องการแสดงข้อความผิดพลาดเองเพื่อให้ข้อมูลกับผู้ใช้มากขึ้น

parser = argparse.ArgumentParser(description="ตัวอย่าง custom error message")
parser.add_argument("--input", required=True, help="กรุณาระบุไฟล์อินพุต")

try:
    args = parser.parse_args()
except argparse.ArgumentError as err:
    print(f"เกิดข้อผิดพลาด: {err}")

 

7. ตัวอย่างการใช้งาน argparse ในสถานการณ์จริง

ใช้กับเครื่องมืออัตโนมัติ

argparse เหมาะสำหรับโปรแกรมที่ต้องจัดการไฟล์หรือวิเคราะห์ข้อมูลแบบอัตโนมัติ เพราะผู้ใช้สามารถระบุ path หรือโหมดต่าง ๆ ผ่านคอมมานด์ไลน์ได้

$ python data_processor.py --input data.csv --output results.json --verbose

ใช้กับโปรเจกต์ขนาดใหญ่

ในโปรเจกต์ใหญ่ ๆ สามารถใช้ซับคอมมานด์และ mutually exclusive arguments เพื่อปรับปรุงการใช้งานของโปรแกรม เช่น ระบบจัดการแพ็คเกจ

$ python package_manager.py install package_name

การใช้ argparse ไม่เพียงทำให้โปรแกรมใช้งานง่าย ยังเพิ่มโอกาสในการนำโค้ดไปใช้ซ้ำและดูแลรักษาในระยะยาว

8. สรุป

การใช้ argparse ช่วยให้โปรแกรม Python ของคุณรองรับการใช้งานผ่านคอมมานด์ไลน์อย่างยืดหยุ่นและมีประสิทธิภาพ ทั้งในส่วนของอาร์กิวเมนต์บังคับ ออปชั่น ซับคอมมานด์ และ mutually exclusive arguments เหมาะกับงานทุกขนาด โดยเฉพาะการจัดการข้อมูลหรืออัตโนมัติ

การศึกษาตัวอย่างในงานจริงและแนวทางปฏิบัติที่ดีจะช่วยให้คุณปรับแต่งโปรแกรมได้เหมาะสมกับความต้องการ อีกทั้งยังสามารถเพิ่มประสิทธิภาพและการตรวจสอบข้อผิดพลาดเพื่อประสบการณ์ที่ดีของผู้ใช้

หากมีคำถามเพิ่มเติม สามารถสอบถามได้เสมอ

侍エンジニア塾