Hướng dẫn sử dụng đối số dòng lệnh trong Python: sys.argv và argparse từ cơ bản đến nâng cao

1. Cách sử dụng cơ bản đối số dòng lệnh trong Python

Đối số dòng lệnh là gì?

Khi chạy chương trình Python, thông tin bổ sung được truyền kèm với lệnh thực thi được gọi là “đối số dòng lệnh”. Điều này cho phép thay đổi linh hoạt hoạt động của chương trình và dễ dàng truyền dữ liệu từ bên ngoài. Ví dụ, bằng cách truyền tên tệp hoặc giá trị cấu hình làm đối số, bạn có thể thay đổi nội dung chương trình một cách động.

Lấy đối số dòng lệnh bằng sys.argv

Trong Python, bạn có thể lấy đối số dòng lệnh bằng cách sử dụng mô-đun sys trong thư viện chuẩn. sys.argv là một biến lưu trữ các đối số dòng lệnh dưới dạng danh sách. Phần tử đầu tiên của danh sách (sys.argv[0]) là tên script được thực thi, còn các phần tử từ thứ hai trở đi là các giá trị được truyền làm đối số.

Ví dụ: Chương trình tính toán đơn giản

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()
Chương trình trên sẽ tính tổng của hai số được truyền từ dòng lệnh và hiển thị kết quả. Ví dụ chạy như sau:
$ python script.py 3 5
合計: 8.0
 

2. Xử lý đối số nâng cao với mô-đun argparse

Cơ bản về argparse

Với sys.argv, bạn có thể lấy các đối số cơ bản, nhưng khi số lượng đối số nhiều hoặc khi cần sử dụng đối số tùy chọn hay cờ (--verbose chẳng hạn), thì mô-đun argparse trong thư viện chuẩn rất hữu ích. Mô-đun này cho phép phân tích đối số và tự động sinh thông báo lỗi một cách dễ dàng.

Phân tích đối số và tạo parser

Để sử dụng argparse, trước tiên cần tạo một parser để phân tích đối số. Sau đó cấu hình các đối số cho parser và tiến hành phân tích các đối số dòng lệnh.

Ví dụ: Cách sử dụng cơ bản của argparse

import argparse

def main():
    parser = argparse.ArgumentParser(description='サンプルプログラムです')
    parser.add_argument('arg1', help='最初の引数')
    parser.add_argument('arg2', type=float, help='2番目の数値引数')
    args = parser.parse_args()

    print(f"arg1 = {args.arg1}")
    print(f"arg2 = {args.arg2}")

if __name__ == "__main__":
    main()
Chương trình này nhận 2 đối số: arg1 được xử lý như chuỗi, còn arg2 được xử lý như số, sau đó in ra sau khi phân tích.
$ python script.py test 5.5
arg1 = test
arg2 = 5.5

Xử lý đối số tùy chọn và cờ

Một tính năng mạnh mẽ của argparse là hỗ trợ đối số tùy chọn và cờ. Điều này cho phép viết mã chỉ chạy khi đối số được chỉ định, hoặc cung cấp đầu ra chi tiết (như cờ --verbose).

Ví dụ: Sử dụng đối số tùy chọn và cờ

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()
Trong chương trình này, khi cờ --verbose được chỉ định thì kết quả chi tiết sẽ được hiển thị, còn nếu không thì chỉ hiện tổng đơn giản.
$ python script.py 1 2 3 --verbose
計算詳細: [1.0, 2.0, 3.0] の合計は 6.0 です
 

3. Xử lý lỗi và kiểm tra đối số

Kiểm tra số lượng và kiểu của đối số

Khi làm việc với đối số dòng lệnh, nếu người dùng không cung cấp đúng cách, cần hiển thị thông báo lỗi để tránh chương trình hoạt động sai. Việc kiểm tra số lượng và kiểu dữ liệu của đối số giúp giữ cho chương trình ổn định.

Ví dụ: Kiểm tra số lượng và kiểu đối số

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()
Chương trình này yêu cầu đúng 3 đối số (tên script + 2 số). Nếu không thỏa mãn hoặc nếu đối số không phải số, sẽ hiển thị thông báo lỗi.

4. Trường hợp sử dụng thực tế và ứng dụng

Ví dụ tạo công cụ dòng lệnh

Một ví dụ thực tế về việc sử dụng đối số dòng lệnh là tạo công cụ dòng lệnh để thao tác tệp hoặc xử lý dữ liệu.

Ví dụ: Công cụ đếm số dòng trong tệp

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()
Công cụ này sẽ đếm số dòng trong tệp được chỉ định và in ra kết quả.
$ python count_lines.py example.txt
ファイル example.txt の行数: 100

5. Kết luận

Việc nắm vững cách xử lý đối số dòng lệnh trong Python giúp chương trình linh hoạt hơn. Từ cách đơn giản với sys.argv đến xử lý phức tạp với argparse, bạn có thể chọn phương pháp phù hợp tùy theo nhu cầu. Đồng thời, việc bổ sung xử lý lỗi và kiểm tra đối số sẽ giúp tạo ra các chương trình ổn định và mạnh mẽ hơn.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール