在Python中,命令行參數處理在很多情況下非常有用。Python標準庫中提供了 argparse 模塊實現命令行參數解析,本文將從基本概念、常用參數、多個子命令等多個方面來詳細闡述。
一、基本概念
argparse 是 Python 標準庫中的一個用於處理命令行參數的模塊,它可以解析命令行參數,並在使用幫助功能時生成漂亮的輸出。Argparse 模塊提供了一種簡單的方式來定義命令行參數和幫助文本,在Python腳本中使用這些參數。
argparse 模塊中最常用的對象是 ArgumentParser。當創建 ArgumentParser 對象時,可以向它添加參數和參數組。
import argparse parser = argparse.ArgumentParser(description='Process some integers.')
定義了 ArgumentParser 對象之後,就可以向它中添加參數了。
parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)')
最後,使用 ArgumentParser 對象的 parse_args() 方法將解析好的參數打包到一個 Namespace 對象中。
args = parser.parse_args() print(args.accumulate(args.integers))
二、常用參數
argparse 允許添加很多種不同類型的參數,一些常用的參數如下所述。
1. 位置參數
位置參數是在解析器讀取時按定義順序讀取並解析的參數。當定義位置參數時,會指定參數名稱和數據類型。
parser.add_argument("echo", help="echo the string you use here")
2. 可選參數
可選參數是指用戶不必指定的參數。即,用戶可以省略該參數並使用默認值。可選參數需要指定一個參數標誌(或稱選項)和相應的數據類型。
parser.add_argument("--verbosity", help="increase output verbosity")
可選參數也可以使用簡短選項標誌。在 argparse 模塊中,這被稱為短選項。短選項是僅由一個字元組成的參數標誌,通常用在命令行中可重用計數器或開關上。例如 -v 用於指定輸出冗餘程度。
parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true")
3. 互斥參數
argparse 中可以處理互斥參數。互斥參數是指,在命令行中不可能同時指定的兩個參數。例如,在 ls 命令中,指定 -a 和 -l 是互斥的。在 argparse 中,可使用 mutually_exclusive_group() 定義一個互斥參數。
group = parser.add_mutually_exclusive_group() group.add_argument("-v", "--verbose", action="store_true") group.add_argument("-q", "--quiet", action="store_true")
4. 帶參數的選項
在 argparse 中,選項也可以帶參數,例如 -f file 或 –file file。參數類型可以是任意託管的 Python 基本類型。此外,還可以將單個參數視為多個參數,例如一個字元串列表,一個整數或一個文件。
parser.add_argument("-f", "--file", help="specify an output file", metavar="FILE")
三、多個子命令
argparse 模塊還支持多個子命令的處理,即 Python 腳本可以支持多個命令。
使用 add_subparsers() 方法創建一組子命令。對於每個子命令,創建一個子解析器並添加一個新參數屬性命名為 func。
parser = argparse.ArgumentParser() subparsers = parser.add_subparsers() # create the parser for the "spam" command parser_a = subparsers.add_parser('a') parser_a.set_defaults(func=a) # create the parser for the "bacon" command parser_b = subparsers.add_parser('b') parser_b.set_defaults(func=b)
在定義好子解析器之後,您可以根據命名空間執行任何命令。
args = parser.parse_args() args.func(args)
四、完整代碼
import argparse def a(args): print("This is command a") def b(args): print("This is command b") # Create the parser parser = argparse.ArgumentParser() # create subparsers subparsers = parser.add_subparsers() # create the parser for the "a" command parser_a = subparsers.add_parser("a") parser_a.set_defaults(func=a) # create the parser for the "b" command parser_b = subparsers.add_parser("b") parser_b.set_defaults(func=b) # Parse the args args = parser.parse_args() args.func(args)
五、總結
argparse 模塊非常方便,可以輕鬆地處理命令行參數。本文介紹了 argparse 模塊的基本概念、常用參數和多個子命令等多個方面,對於使用 argparse 模塊的 Python 開發者有很大幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/161059.html