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

Làm cách nào để thêm đối số dòng lệnh trong Python?

Giới thiệu ..

Python có một mô-đun argparse rất mạnh mẽ cung cấp các chức năng để phân tích cú pháp các đối số dòng lệnh. Nếu chúng ta muốn lấy thông tin đầu vào của người dùng từ dòng lệnh OS mà không cần tương tác nhiều hoặc viết mã một chương trình chấp nhận các tham số từ dòng lệnh, ví dụ:Cung cấp URL để phân tích cú pháp hoặc chấp nhận tệp để tải lên bộ chứa S3 sau đó có thể sử dụng argparse mà không tốn nhiều công sức.

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

  • Xác định các đối số mà mã của bạn sẽ chấp nhận.

  • Gọi trình phân tích cú pháp đối số để trả về đối tượng kết quả.

  • Sử dụng các đối số.

Tóm lại, cấu trúc của trình phân tích cú pháp đối số trông giống như bên dưới.

def main( parameters):
<< Logic here >>

if __name__ == '__main__':
<< 1. Define argument parser >>
<< 2. Parse the arguements >>
<< 3. Validation >>
<< 4. call main (parameters) >>

Hàm chính biết điểm nhập mã của chúng ta là gì. Phần __name__ =='__main__' chỉ được thực thi khi mã được gọi trực tiếp.

  • Tạo một chương trình chỉ chấp nhận một đối số - người chơi quần vợt dưới dạng chuỗi.

import argparse

def get_args():
""" Function : get_args
parameters used in .add_argument
1. metavar - Provide a hint to the user about the data type.
- By default, all arguments are strings.

2. type - The actual Python data type
- (note the lack of quotes around str)

3. help - A brief description of the parameter for the usage

"""

parser = argparse.ArgumentParser(
description='Example for Two positional arguments',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)

# Adding our first argument player name of type string
parser.add_argument('player',
metavar='player',
type=str,
help='Tennis Player')

return parser.parse_args()

# define main
def main(player):
print(f" *** The {player} had won 20 grandslam titles.")

if __name__ == '__main__':
args = get_args()
main(args.player)

a) Bây giờ khi bạn thực thi chương trình này từ dòng lệnh mà không chuyển bất kỳ tham số nào, tức là nếu không có gì, nó sẽ in ra một câu lệnh sử dụng ngắn gọn về cách thích hợp để gọi chương trình.

In [3]: run <>.ipynb
usage: ipython [-h] player
ipython: error: the following arguments are required: player
An exception has occurred, use %tb to see the full traceback.

b) Nếu chúng tôi cung cấp nhiều hơn một đối số, đối số đó lại khiếu nại. Chương trình phàn nàn về việc nhận được đối số thứ hai chưa được xác định.

c) Chỉ khi chúng ta cung cấp cho chương trình chính xác một đối số thì nó mới chạy

2.Tạo một chương trình chỉ chấp nhận hai đối số - người chơi quần vợt ở dạng chuỗi và danh hiệu Grand slamt mà người chơi giành được dưới dạng số nguyên.

Ví dụ

import argparse

def get_args():
""" Function : get_args
parameters used in .add_argument
1. metavar - Provide a hint to the user about the data type.
- By default, all arguments are strings.

2. type - The actual Python data type
- (note the lack of quotes around str)

3. help - A brief description of the parameter for the usage

"""

parser = argparse.ArgumentParser(
description='Example for Two positional arguments',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)

# Adding our first argument player name of type string
parser.add_argument('player',
metavar='player',
type=str,
help='Tennis Player')

# Adding our second argument player titles of type integer/number.
parser.add_argument('titles',
metavar='titles',
type=int,
help='Tennis Player Grandslam Titles')

return parser.parse_args()

# define main
def main(player, titles):
print(f" *** The {player} had won {titles} grandslam titles.")

if __name__ == '__main__':
args = get_args()
main(args.player, args.titles)

Bây giờ hãy mở thiết bị đầu cuối của bạn và thực hiện chương trình. Nếu các đối số không được truyền, tập lệnh sẽ trả lại lỗi với thông báo rõ ràng.

Đầu ra

<<< python test.py
usage: test.py [-h] player titles
test.py: error: the following arguments are required: player, titles

<<< python test.py federer 20
*** The federer had won 20 grandslam titles.