Phân tích Đối số trong Python: Những điều bạn cần biết

By JoeVu, at: 07:06 Ngày 15 tháng 6 năm 2023

Thời gian đọc ước tính: __READING_TIME__ minutes

Parse Args in Python: What you must know
Parse Args in Python: What you must know

Mở đầu

 

Trong nhiều ứng dụng Python, đặc biệt là những ứng dụng được chạy từ dòng lệnh, việc xử lý các đối số dòng lệnh một cách hiệu quả là rất cần thiết. Việc phân tích cú pháp đối số cho phép script của bạn chấp nhận đầu vào từ người dùng, làm cho nó linh hoạt và mạnh mẽ hơn. Mô-đun argparse của Python cung cấp một cách mạnh mẽ để xử lý các đối số dòng lệnh, giúp dễ dàng xây dựng giao diện dòng lệnh thân thiện với người dùng. Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách sử dụng argparse để phân tích cú pháp các đối số dòng lệnh trong Python.

Bạn đã bao giờ thấy thứ gì đó như thế này chưa?

 

import sys

def main():
    if len(sys.argv) < 3:
        print("Not enough arguments!")
        return
    
    arg1 = sys.argv[1]
    arg2 = sys.argv[2]
    
    if arg1 == 'option1':
        print(f"Option 1 selected with value {arg2}")
    elif arg1 == 'option2':
        print(f"Option 2 selected with value {arg2}")
    else:
        print("Unknown option!")

if __name__ == "__main__":
    main()

 

Vấn đề của script này là gì?

 

  1. Không có thông báo trợ giúp: Script không cung cấp bất kỳ thông báo trợ giúp hoặc hướng dẫn sử dụng nào để hướng dẫn người dùng cách sử dụng nó.
     
  2. Xử lý lỗi tối thiểu: Script chỉ kiểm tra xem có ít hơn hai đối số và in ra một thông báo lỗi mơ hồ.
     
  3. Xác thực đối số kém: Script không xác thực các đối số ngoài việc kiểm tra xem đối số đầu tiên có khớp với 'option1' hoặc 'option2' hay không.
     
  4. Logic được mã hóa cứng: Logic được mã hóa cứng và không linh hoạt, làm cho việc mở rộng hoặc sửa đổi trở nên khó khăn.

 

argparse là gì?

 

argparse là một mô-đun trong thư viện chuẩn Python giúp bạn tạo giao diện dòng lệnh. Nó cho phép bạn định nghĩa các đối số mà chương trình của bạn yêu cầu, phân tích cú pháp các đối số đó và tự động tạo các thông báo trợ giúp và hướng dẫn sử dụng. Điều này giúp dễ dàng xử lý đầu vào dòng lệnh và cung cấp trải nghiệm người dùng tốt hơn.

 

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

 

Bước 1: Nhập argparse

 

Đầu tiên, bạn cần nhập mô-đun argparse:

 

import argparse

 

Bước 2: Tạo một bộ phân tích cú pháp

 

Tiếp theo, tạo một đối tượng ArgumentParser. Đối tượng này sẽ chứa tất cả thông tin cần thiết để phân tích cú pháp các đối số dòng lệnh:

 

parser = argparse.ArgumentParser(description='Example script to demonstrate argparse.')

 

Bước 3: Định nghĩa các đối số

 

Bạn có thể định nghĩa các đối số mà chương trình của bạn yêu cầu bằng phương pháp add_argument. Mỗi đối số cần một tên và, tùy chọn, một kiểu, giá trị mặc định, thông báo trợ giúp và các thuộc tính khác:

parser.add_argument('input', type=str, help='Input file path')
parser.add_argument('output', type=str, help='Output file path')
parser.add_argument('--verbose', action='store_true', help='Increase output verbosity'

 

Bước 4: Phân tích cú pháp các đối số

 

Sau khi bạn đã định nghĩa các đối số, hãy sử dụng phương pháp parse_args để phân tích cú pháp các đối số từ dòng lệnh:

 

args = parser.parse_args()

 

Bước 5: Sử dụng các đối số

 

Sau khi phân tích cú pháp, bạn có thể truy cập các đối số dưới dạng thuộc tính của đối tượng args:

 

input_path = args.input
output_path = args.output
verbose = args.verbose

if verbose:
    print(f'Input file: {input_path}')
    print(f'Output file: {output_path}')

 

Ví dụ Script

 

Đây là một ví dụ script hoàn chỉnh minh họa cách sử dụng cơ bản của argparse:

 

import argparse

def main():
    parser = argparse.ArgumentParser(description='Example script to demonstrate argparse.')
    parser.add_argument('input', type=str, help='Input file path')
    parser.add_argument('output', type=str, help='Output file path')
    parser.add_argument('--verbose', action='store_true', help='Increase output verbosity')

    args = parser.parse_args()

    input_path = args.input
    output_path = args.output
    verbose = args.verbose

    if verbose:
        print(f'Input file: {input_path}')
        print(f'Output file: {output_path}')
    
    # Thêm logic script chính của bạn ở đây

if __name__ == '__main__':
    main()


Nếu chúng ta chạy script này, nó sẽ cho bạn biết cách sử dụng script một cách chính xác

 

❯ python test_script.py
usage: test_script.py [-h] [--verbose] input output
test_script.py: error: the following arguments are required: input, output

 

Các tính năng nâng cao

 

Đối số vị trí và đối số tùy chọn

 

  • Đối số vị trí: Đây là bắt buộc và phải được cung cấp theo thứ tự chính xác.
     
  • Đối số tùy chọn: Đây là tùy chọn và có thể được cung cấp theo bất kỳ thứ tự nào. Chúng thường bắt đầu bằng - hoặc --.

 

Kiểu đối số và giá trị mặc định

 

Bạn có thể chỉ định kiểu của một đối số (ví dụ: int, float, str) và đặt giá trị mặc định:

 

parser.add_argument('--count', type=int, default=1, help='Number of times to repeat the message')

 

Lựa chọn

 

Bạn có thể hạn chế một đối số thành một tập hợp các lựa chọn được xác định trước:

 

parser.add_argument('--method', choices=['add', 'subtract', 'multiply', 'divide'], help='Mathematical operation to perform')

 

Đối số bắt buộc

 

Các đối số tùy chọn có thể được đặt là bắt buộc:

 

parser.add_argument('--log', required=True, help='Log file path')

 

Tạo thông báo trợ giúp và hướng dẫn sử dụng


Mô-đun argparse tự động tạo các thông báo trợ giúp và hướng dẫn sử dụng cho script của bạn. Chạy script của bạn với cờ -h hoặc --help để xem các thông báo này:

 

$ python script.py -h

 

Kết quả:

 

usage: script.py [-h] [--verbose] input output

Example script to demonstrate argparse.

positional arguments:
  input       Input file path
  output      Output file path

optional arguments:
  -h, --help  show this help message and exit
  --verbose   Increase output verbosity

 

Kết luận

 

Sử dụng argparse để phân tích cú pháp các đối số dòng lệnh trong Python là một cách hiệu quả để tạo giao diện dòng lệnh linh hoạt và thân thiện với người dùng. Bằng cách định nghĩa cấu trúc đối số rõ ràng và toàn diện, bạn có thể nâng cao khả năng sử dụng và chức năng của các script. Hãy bắt đầu tích hợp argparse vào các dự án Python của bạn ngay hôm nay và trải nghiệm những lợi ích của việc phân tích cú pháp đối số được sắp xếp hợp lý.

Một vài lựa chọn thay thế khác mà chúng ta có thể sử dụng:

Tag list:
- parse args python
- pass arguments
- args parsers python
- Python argument parsers
- arguments script
- args parsers
- script arguments parsers

Theo dõi

Theo dõi bản tin của chúng tôi và không bao giờ bỏ lỡ những tin tức mới nhất.