การใช้งานอาร์กิวเมนต์บรรทัดคำสั่งใน Python: คู่มือพื้นฐานถึงขั้นสูง

目次

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 สำหรับการจัดการที่ซับซ้อน ควรเลือกวิธีการตามความเหมาะสมกับงานจริง นอกจากนี้ การจัดการข้อผิดพลาดและการตรวจสอบอาร์กิวเมนต์ยังช่วยสร้างโปรแกรมที่มีความเสถียรและแข็งแกร่งมากขึ้น
侍エンジニア塾