如何在Python中新增命令列引數?


簡介…

Python 有一個非常強大的 argparse 模組,它提供用於解析命令列引數的函式。如果我們想從作業系統命令列獲取使用者輸入而無需大量互動,或者編寫一個從命令列接受引數的程式(例如,提供要解析的 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)

a) 現在,當你在不傳遞任何引數的情況下從命令列執行此程式時,即如果什麼也沒有給出,它將列印關於正確呼叫程式方法的簡短使用說明。

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) 如果我們提供多個引數,它會再次報錯。程式會抱怨收到一個未定義的第二個引數。

c) 只有當我們向程式提供 exactly 一個引數時,它才會執行。

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.

更新於:2020年11月10日

744 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.