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