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

Trình phân tích cú pháp Python cho các tùy chọn dòng lệnh

Rất thường xuyên, chúng ta cần truyền các đối số cho tập lệnh Python khi thực thi từ dòng lệnh. Tuy nhiên, tập lệnh đưa ra ngoại lệ khi các tham số cần thiết không được cung cấp với số lượng hoặc kiểu hoặc thứ tự bằng nhau. Đó là lúc cần phải phân tích cú pháp chính xác đối số dòng lệnh.

argparse mô-đun cung cấp các công cụ để viết các giao diện dòng lệnh rất dễ sử dụng. Nó xử lý cách phân tích cú pháp các đối số được thu thập trong danh sách sys.argv, tự động tạo trợ giúp và đưa ra thông báo lỗi khi các tùy chọn không hợp lệ được đưa ra.

Bước đầu tiên để mô tả giao diện dòng lệnh là thiết lập đối tượng phân tích cú pháp. Điều này được thực hiện bởi ArgumentParser () chức năng trong mô-đun argparse. Hàm có thể được cung cấp một chuỗi giải thích làm tham số mô tả.

Để bắt đầu với kịch bản của chúng tôi sẽ được thực thi từ dòng lệnh mà không có bất kỳ đối số nào. Vẫn sử dụng parse_args () phương thức của đối tượng phân tích cú pháp, không có tác dụng gì vì không có bất kỳ đối số nào được đưa ra.

 import argparseparser =argparse.ArgumentParser (description ="sample đối số phân tích cú pháp") args =parser.parse_args () 

Khi tập lệnh trên được chạy

 C:\ python36> python argparser1.pyC:\ python36> python argparser1.py --helpusage:argparser1.py [-h] đối số mẫu đối số phân tích cú pháp:-h, --help hiển thị thông báo trợ giúp này và thoát  

Cách sử dụng dòng lệnh thứ hai cung cấp tùy chọn –help tạo ra một thông báo trợ giúp như được hiển thị. Tham số –help có sẵn theo mặc định.

Bây giờ chúng ta hãy xác định một đối số là bắt buộc để tập lệnh chạy và nếu tập lệnh không được cung cấp sẽ tạo ra lỗi. Ở đây chúng tôi xác định đối số ‘người dùng’ bằng add_argument () phương pháp.

 import argparseparser =argparse.ArgumentParser (description ="sample đối số phân tích cú pháp") parser.add_argument ("user") args =parser.parse_args () if args.user =="Admin":print ("Xin chào quản trị viên") else:print ("Xin chào Khách") 

Trợ giúp của tập lệnh này hiện hiển thị một đối số vị trí ở dạng 'người dùng'. Chương trình sẽ kiểm tra xem giá trị của nó có phải là "Admin" hay không và in ra thông báo tương ứng.

 C:\ python36> python argparser1.py --helpusage:argparser1.py [-h] đối số usersample phân tích cú pháp đối số:đối số useroptional:-h, --help hiển thị thông báo trợ giúp này và thoátC:\ python36> python argparser1. py AdminHello AdminC:\ python36> python argparser1.py tempHello Guest 

Chúng tôi có thể gán mặc định giá trị của một đối số trong phương thức add_argument ().

 import argparseparser =argparse.ArgumentParser (description ="sample đối số phân tích cú pháp") parser.add_argument ("user", nargs ='?', default ="Admin") args =parser.parse_args () if args.user =="Quản trị viên":print ("Xin chào Quản trị viên") else:print ("Xin chào Quý khách") 

Đây tường thuật là số lượng đối số dòng lệnh sẽ được sử dụng. '?'. Một đối số sẽ được sử dụng từ dòng lệnh nếu có thể và được tạo thành một mục duy nhất. Nếu không có đối số dòng lệnh nào, giá trị từ mặc định sẽ được tạo ra.

 C:\ python36> python argparser1.pyHello AdminC:\ python36> python argparser1.py AdminHello AdminC:\ python36> python argparser1.py testXem khách 

Theo mặc định, tất cả các đối số được coi là chuỗi. Để đề cập rõ ràng đến loại của đối số, sử dụng tham số kiểu trong phương thức add_argument (). Tất cả các kiểu dữ liệu Python đều là giá trị hợp lệ của kiểu.

 import argparseparser =argparse.ArgumentParser (description ="thêm số") parser.add_argument ("first", type =int) parser.add_argument ("second", type =int) args =parser.parse_args () x =args.firsty =args.secondz =x + yprint ('thêm {} và {} ={}'. format (x, y, z)) C:\ python36> python argparser2.py 2 3 phép cộng của 2 và 3 =5 

Trong các ví dụ trên, các đối số là bắt buộc. Để thêm đối số tùy chọn, hãy thêm tiền tố tên của nó bằng dấu gạch ngang kép -. Trong trường hợp sau, đối số họ là tùy chọn vì nó được bắt đầu bằng dấu gạch ngang kép (--surname)

 import argparseparser =argparse.ArgumentParser () parser.add_argument ("name") parser.add_argument ("- họ") args =parser.parse_args () print ("Tên tôi là", args.name, end ='') if args.surname:print (args.surname) 

Tên một chữ cái của đối số có tiền tố là một dấu gạch ngang đóng vai trò như một tùy chọn tên ngắn.

 C:\ python36> python argparser3.py MalharTên tôi là MalharC:\ python36> python argparser3.py Malhar - tên LathkarTên tôi là Malhar Lathkarparser.add_argument ("- s", "- họ") 

Nếu muốn đối số chỉ có giá trị từ một danh sách đã xác định, thì đối số đó được định nghĩa là tham số lựa chọn.

 import argparseparser =argparse.ArgumentParser () parser.add_argument ("sub", selection =['Physics', 'Maths', 'Biology']) args =parser.parse_args () print ("Môn học của tôi là", args.sub) 

Lưu ý rằng nếu giá trị của tham số không có trong danh sách, lỗi lựa chọn không hợp lệ sẽ hiển thị.

 C:\ python36> python argparser4.py Physics Môn học của tôi là PhysicsC:\ python36> python argparser4.py Englishusage:argparser4.py [-h] {Physics, Maths, Biology} argparser4.py:error:đối số sub:không hợp lệ lựa chọn:'Tiếng Anh' (chọn từ 'Vật lý', 'Toán học', 'Sinh học')