Computer >> Máy Tính >  >> Lập trình >> Python

Phân tích cú pháp đối số bằng Python

Mọi ngôn ngữ lập trình đều có một tính năng để tạo các tập lệnh và chạy chúng từ thiết bị đầu cuối hoặc được gọi bởi các chương trình khác. Khi chạy các tập lệnh như vậy, chúng ta thường cần truyền các đối số cần thiết của tập lệnh để các chức năng khác nhau được thực thi bên trong tập lệnh. Trong bài viết này, chúng ta sẽ xem các cách khác nhau để chuyển các đối số vào một tập lệnh python.

Sử dụng sys.argv

Đây là một mô-đun có sẵn sys.argv có thể xử lý các đối số được truyền bằng tập lệnh. Theo mặc định, đối số đầu tiên được coi là tại sys.argv [0] là tên tệp. phần còn lại của các đối số được lập chỉ mục là 1,2, v.v. Trong ví dụ dưới đây, chúng ta thấy cách một tập lệnh sử dụng các đối số được truyền vào nó.

import sys
print(sys.argv[0])
print("Hello ",sys.argv[1],", welcome!")

chúng tôi thực hiện các bước dưới đây để chạy tập lệnh trên và nhận được kết quả sau:

Để chạy đoạn mã trên, chúng ta vào cửa sổ đầu cuối và viết lệnh hiển thị bên dưới. Ở đây tên của tập lệnh là args_demo.py. Chúng tôi chuyển một đối số có giá trị Samantha vào tập lệnh này.

D:\Pythons\py3projects>python3 args_demo.py Samantha
args_demo.py
Hello Samantha welcome!

Sử dụng getopt

Đây là một cách tiếp cận khác có tính linh hoạt hơn so với cách tiếp cận trước đó. Ở đây chúng ta có thể thu thập giá trị của các đối số và xử lý chúng cùng với xử lý lỗi và các ngoại lệ. Trong chương trình dưới đây, chúng tôi tìm tích của hai số bằng cách lấy các đối số và bỏ qua đối số đầu tiên là tên tệp. Tất nhiên, mô-đun sys cũng được sử dụng ở đây.

Ví dụ

import getopt
import sys

# Remove the first argument( the filename)
all_args = sys.argv[1:]
prod = 1

try:
   # Gather the arguments
   opts, arg = getopt.getopt(all_args, 'x:y:')
   # Should have exactly two options
   if len(opts) != 2:
      print ('usage: args_demo.py -x <first_value> -b <second_value>')
   else:
      # Iterate over the options and values
      for opt, arg_val in opts:
         prod *= int(arg_val)
      print('Product of the two numbers is {}'.format(prod))

except getopt.GetoptError:
   print ('usage: args_demo.py -a <first_value> -b <second_value>')
   sys.exit(2)

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

D:\Pythons\py3projects >python3 args_demo.py -x 3 -y 12
Product of the two numbers is 36
# Next Run
D:\Pythons\py3projects >python3 args_demo.py
usage: args_demo.py -x <first_value> -b <second_value>

Sử dụng argparse

Đây thực sự là mô-đun được ưu tiên nhất để xử lý việc truyền đối số vì các lỗi và ngoại lệ được chính mô-đun xử lý mà không cần các dòng mã bổ sung. Chúng ta phải đề cập đến tên văn bản trợ giúp cần thiết cho mọi đối số mà chúng ta sẽ sử dụng và sau đó sử dụng tên của đối số trong các phần khác của mã.

Ví dụ

import argparse

# Construct an argument parser
all_args = argparse.ArgumentParser()

# Add arguments to the parser
all_args.add_argument("-x", "--Value1", required=True,
   help="first Value")
all_args.add_argument("-y", "--Value2", required=True,
   help="second Value")
args = vars(all_args.parse_args())

# Find the product
print("Product is {}".format(int(args['Value1']) * int(args['Value2'])))

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

D:\Pythons\py3projects>python3 args_demo.py -x 3 -y 21
Product is 63
# Next Run
D:\Pythons\py3projects>python3 args_demo.py -x 3 -y
usage: args_demo.py [-h] -x VALUE1 -y VALUE2
args_demo.py: error: argument -y/--Value2: expected one argument