Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

จะเพิ่มอาร์กิวเมนต์บรรทัดคำสั่งใน Python ได้อย่างไร


แนะนำตัว..

Python มีโมดูล argparse ที่ทรงพลังมาก ซึ่งมีฟังก์ชันสำหรับการแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่ง หากเราต้องการรับอินพุตของผู้ใช้จากบรรทัดคำสั่ง OS โดยไม่ต้องโต้ตอบหรือเขียนโค้ดโปรแกรมที่ยอมรับพารามิเตอร์จากบรรทัดคำสั่งเช่น ระบุ URL เพื่อแยกวิเคราะห์หรือยอมรับไฟล์เพื่ออัปโหลดไปยังบัคเก็ต S3 จากนั้นจึงใช้ argparse ได้อย่างง่ายดาย

การใช้งานพื้นฐาน

  • กำหนดอาร์กิวเมนต์ที่โค้ดของคุณจะยอมรับ

  • เรียกตัวแยกวิเคราะห์อาร์กิวเมนต์เพื่อส่งคืนวัตถุผลลัพธ์

  • ใช้อาร์กิวเมนต์

กล่าวโดยสรุป โครงสร้างของตัวแยกวิเคราะห์อาร์กิวเมนต์มีลักษณะดังนี้

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

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

ฟังก์ชั่นหลักรู้ว่าจุดเริ่มต้นของรหัสของเราคืออะไร ส่วน __name__ =='__main__' จะดำเนินการก็ต่อเมื่อมีการเรียกโค้ดโดยตรงเท่านั้น

  • สร้างโปรแกรมที่จะยอมรับเพียงหนึ่งอาร์กิวเมนต์ - นักเทนนิสเป็นสตริง

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)

ก) ตอนนี้เมื่อคุณรันโปรแกรมนี้จากบรรทัดคำสั่งโดยไม่ผ่านพารามิเตอร์ใด ๆ เช่น หากไม่ระบุอะไรเลย โปรแกรมจะพิมพ์คำสั่งการใช้งานสั้นๆ เกี่ยวกับวิธีการเรียกใช้โปรแกรมอย่างเหมาะสม

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.

ข) ถ้าเราให้อาร์กิวเมนต์มากกว่าหนึ่งข้อ โปรแกรมจะบ่นว่าได้รับอาร์กิวเมนต์ที่สองที่ยังไม่ได้กำหนดไว้

c) เฉพาะเมื่อเราให้โปรแกรมอาร์กิวเมนต์เพียงหนึ่งอาร์กิวเมนต์เท่านั้น โปรแกรมจะทำงาน

2.สร้างโปรแกรมที่จะยอมรับเพียงสองอาร์กิวเมนต์ - ผู้เล่นเทนนิสเป็นชื่อสตริงและแกรนด์สแลมท์ชื่อที่ผู้เล่นชนะเป็นจำนวนเต็ม

ตัวอย่าง

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)

ตอนนี้เปิดเทอร์มินัลของคุณและรันโปรแกรม ถ้าอาร์กิวเมนต์ไม่ผ่าน สคริปต์จะส่งกลับข้อผิดพลาดพร้อมข้อความที่ชัดเจน

ผลลัพธ์

<<< 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.