目次
1. วิธีการใช้งานอาร์กิวเมนต์บรรทัดคำสั่งใน Python เบื้องต้น
อาร์กิวเมนต์บรรทัดคำสั่งคืออะไร?
เมื่อรันโปรแกรม Python เราสามารถส่งข้อมูลเพิ่มเติมไปพร้อมกับคำสั่งรันได้ ข้อมูลเหล่านี้เรียกว่า “อาร์กิวเมนต์บรรทัดคำสั่ง” สิ่งนี้ช่วยให้เราปรับเปลี่ยนการทำงานของโปรแกรมได้อย่างยืดหยุ่น และสามารถส่งข้อมูลจากภายนอกเข้าไปได้ง่าย ตัวอย่างเช่น การส่งชื่อไฟล์หรือค่าการตั้งค่าเป็นอาร์กิวเมนต์ เพื่อเปลี่ยนแปลงการทำงานของโปรแกรมแบบไดนามิกการดึงอาร์กิวเมนต์ด้วย sys.argv
ใน Python เราสามารถใช้งานโมดูลมาตรฐาน sys
เพื่อดึงอาร์กิวเมนต์จากบรรทัดคำสั่ง sys.argv
เป็นตัวแปรชนิดลิสต์ที่เก็บอาร์กิวเมนต์ โดยองค์ประกอบแรก (sys.argv[0]
) คือชื่อสคริปต์ และองค์ประกอบถัดไปคือค่าที่ส่งเข้ามาเป็นอาร์กิวเมนต์โค้ดตัวอย่าง: โปรแกรมคำนวณง่ายๆ
import sys
def main():
if len(sys.argv) < 3:
print("ข้อผิดพลาด: ต้องการอาร์กิวเมนต์ 2 ค่า")
return
num1 = float(sys.argv[1])
num2 = float(sys.argv[2])
print(f"ผลรวม: {num1 + num2}")
if __name__ == "__main__":
main()
โปรแกรมนี้จะรับค่าตัวเลข 2 ค่าและแสดงผลรวม ตัวอย่างการรันคือ:$ python script.py 3 5
ผลรวม: 8.0

2. การประมวลผลอาร์กิวเมนต์ขั้นสูงด้วย argparse
พื้นฐานของ argparse
แม้ว่า sys.argv
จะเพียงพอสำหรับการดึงอาร์กิวเมนต์แบบง่าย แต่ถ้ามีจำนวนอาร์กิวเมนต์มากขึ้น หรือมีอาร์กิวเมนต์เสริม เช่นฟลัก --verbose
การใช้โมดูลมาตรฐาน argparse
จะสะดวกกว่า โมดูลนี้ช่วยจัดการการวิเคราะห์อาร์กิวเมนต์ และสร้างข้อความผิดพลาดอัตโนมัติได้ง่ายการสร้างพาร์เซอร์และการวิเคราะห์อาร์กิวเมนต์
เพื่อใช้argparse
เราต้องสร้างพาร์เซอร์สำหรับวิเคราะห์อาร์กิวเมนต์ จากนั้นกำหนดรูปแบบอาร์กิวเมนต์ และทำการวิเคราะห์จริงโค้ดตัวอย่าง: วิธีใช้ argparse
เบื้องต้น
import argparse
def main():
parser = argparse.ArgumentParser(description='นี่คือโปรแกรมตัวอย่าง')
parser.add_argument('arg1', help='อาร์กิวเมนต์แรก')
parser.add_argument('arg2', type=float, help='อาร์กิวเมนต์ที่สอง (ตัวเลข)')
args = parser.parse_args()
print(f"arg1 = {args.arg1}")
print(f"arg2 = {args.arg2}")
if __name__ == "__main__":
main()
โปรแกรมนี้รับอาร์กิวเมนต์ 2 ค่า arg1
เป็นสตริง และ arg2
เป็นตัวเลข จากนั้นจะแสดงผล$ python script.py test 5.5
arg1 = test
arg2 = 5.5
การใช้อาร์กิวเมนต์เสริมและฟลัก
คุณสมบัติที่ทรงพลังของargparse
คือรองรับอาร์กิวเมนต์เสริมและฟลัก ทำให้สามารถเขียนโปรแกรมที่ทำงานเพิ่มเติมเมื่อมีการกำหนดอาร์กิวเมนต์ เช่น การเปิดใช้งาน --verbose
เพื่อแสดงรายละเอียดเพิ่มเติมโค้ดตัวอย่าง: การใช้อาร์กิวเมนต์เสริมและฟลัก
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--verbose', action='store_true', help='แสดงผลอย่างละเอียด')
parser.add_argument('numbers', nargs='+', type=float, help='ลิสต์ของตัวเลข')
args = parser.parse_args()
total = sum(args.numbers)
if args.verbose:
print(f"รายละเอียด: {args.numbers} ผลรวมคือ {total}")
else:
print(f"ผลรวม: {total}")
if __name__ == "__main__":
main()
หากมีการใช้ฟลัก --verbose
จะได้ผลลัพธ์แบบละเอียด มิฉะนั้นจะแสดงผลรวมแบบย่อ$ python script.py 1 2 3 --verbose
รายละเอียด: [1.0, 2.0, 3.0] ผลรวมคือ 6.0

3. การจัดการข้อผิดพลาดและการตรวจสอบอาร์กิวเมนต์
การตรวจสอบจำนวนและชนิดของอาร์กิวเมนต์
เมื่อใช้อาร์กิวเมนต์บรรทัดคำสั่ง ต้องตรวจสอบว่าผู้ใช้ป้อนข้อมูลถูกต้องหรือไม่ เพื่อป้องกันการทำงานผิดพลาดของโปรแกรม การตรวจสอบจำนวนและชนิดของอาร์กิวเมนต์ช่วยให้โปรแกรมมีเสถียรภาพมากขึ้นโค้ดตัวอย่าง: ตรวจสอบจำนวนและชนิดของอาร์กิวเมนต์
import sys
def main():
if len(sys.argv) != 3:
print("ข้อผิดพลาด: ต้องการอาร์กิวเมนต์ 2 ค่า")
return
try:
num1 = float(sys.argv[1])
num2 = float(sys.argv[2])
except ValueError:
print("ข้อผิดพลาด: อาร์กิวเมนต์ต้องเป็นตัวเลข")
return
print(f"ผลรวม: {num1 + num2}")
if __name__ == "__main__":
main()
โปรแกรมนี้ตรวจสอบว่าอาร์กิวเมนต์ต้องมี 3 ค่า (ชื่อสคริปต์ + ตัวเลข 2 ค่า) และหากอาร์กิวเมนต์ไม่ใช่ตัวเลข จะส่งข้อความผิดพลาด4. ตัวอย่างการใช้งานจริง
ตัวอย่างการสร้างเครื่องมือบรรทัดคำสั่ง
หนึ่งในกรณีที่ใช้จริงคือการสร้างเครื่องมือที่จัดการไฟล์หรือข้อมูล โดยใช้อาร์กิวเมนต์บรรทัดคำสั่งโค้ดตัวอย่าง: เครื่องมือสำหรับนับจำนวนบรรทัดในไฟล์
import argparse
def main():
parser = argparse.ArgumentParser(description='เครื่องมือนับจำนวนบรรทัดในไฟล์')
parser.add_argument('filename', help='ชื่อไฟล์ที่ต้องการนับ')
args = parser.parse_args()
try:
with open(args.filename, 'r') as file:
lines = file.readlines()
print(f"ไฟล์ {args.filename} มีจำนวนบรรทัด: {len(lines)}")
except FileNotFoundError:
print(f"ข้อผิดพลาด: ไม่พบไฟล์ {args.filename}")
if __name__ == "__main__":
main()
เครื่องมือนี้จะนับจำนวนบรรทัดในไฟล์ที่ระบุและแสดงผล$ python count_lines.py example.txt
ไฟล์ example.txt มีจำนวนบรรทัด: 100
5. สรุป
การเรียนรู้วิธีจัดการอาร์กิวเมนต์บรรทัดคำสั่งใน Python จะช่วยเพิ่มความยืดหยุ่นให้กับโปรแกรม ตั้งแต่การใช้sys.argv
แบบง่าย ไปจนถึง argparse
สำหรับการจัดการที่ซับซ้อน ควรเลือกวิธีการตามความเหมาะสมกับงานจริง นอกจากนี้ การจัดการข้อผิดพลาดและการตรวจสอบอาร์กิวเมนต์ยังช่วยสร้างโปรแกรมที่มีความเสถียรและแข็งแกร่งมากขึ้น