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


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ì?
- 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ó.
- 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ồ.
- 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.
- 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: