argparse 使用指南
argparse是Python標(biāo)準(zhǔn)庫中推薦使用的命令行解析模塊,
其前身是optparse庫,從Python 2.7開始,optparse庫被棄用,
替代它的就是argparse庫,除此之外,標(biāo)準(zhǔn)庫中的getopt庫也提供了相似的功能。
一個(gè)命令行的工具應(yīng)該滿足以下幾個(gè)要求:
命令可以不帶任何可選參數(shù)運(yùn)行,即提供默認(rèn)可選參數(shù)
可以提供指定可選參數(shù)覆蓋默認(rèn)值
提供一小段幫助文檔,可以通過命令直接獲取
基本使用
首先從一個(gè)不帶任何參數(shù)的腳本開始,新建一個(gè)腳本,輸入以下內(nèi)容:
# argtest1.py
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
# ----------------
# 測(cè)試腳本
# ----------------
# 直接執(zhí)行命令沒有任何作用
$ python argtest1.py
# --help參數(shù)顯示基本用法
$ python argtest1.py --help
usage: argtest1.py [-h]
optional arguments:
-h, --help show this help message and exit
# 提供錯(cuò)誤的可選參數(shù)
$ python argtest1.py --verbose
usage: argtest1.py [-h]
argtest1.py: error: unrecognized arguments: --verbose
# 提供錯(cuò)誤的位置參數(shù)
$ python argtest1 foo
usage: argtest1.py [-h]
argtest1.py: error: unrecognized arguments: foo
從上面可以看出,argparse模塊提供了兩個(gè)個(gè)基本功能:
--help或-h參數(shù)顯示基本用法
對(duì)于錯(cuò)誤的位置參數(shù)或可選參數(shù)給出提示
注:這里的位置參數(shù)就相當(dāng)于函數(shù)中的位置參數(shù)和關(guān)鍵字參數(shù)
參數(shù)添加
為命令行工具添加參數(shù)可以使用ArgumentParser.add_argument方法,
然后可以在腳本中調(diào)用ArgumentParser.parse_args方法獲取腳本執(zhí)行時(shí)設(shè)置的參數(shù)值
ArgumentParser.add_argument(name or flags...
[, action][, nargs][, const][, default][, type]
[, choices][, required][, help][, metavar][, dest])
函數(shù)原型如上,參數(shù)含義分別為(其中加粗的參數(shù)為將會(huì)涉及到的):
name or flags: 位置參數(shù)的名稱(如:foo)或可選參數(shù)的標(biāo)識(shí)(如:-f, --foo)
action: 參數(shù)出現(xiàn)在命令行中所要執(zhí)行的操作類型,可以理解為如何讀取參數(shù)
nargs: 當(dāng)前參數(shù)可以從命令行中讀取幾個(gè)參數(shù)值,如為一個(gè)參數(shù)指定多個(gè)值
const: action或nargs所使用的一個(gè)常量值
default: 當(dāng)參數(shù)在命令行中不存在時(shí)的默認(rèn)值,注意,這里是不存在時(shí)的默認(rèn)值,而不是沒有指定值時(shí)的默認(rèn)值
type: 參數(shù)的數(shù)據(jù)類型,可以用來對(duì)命令行參數(shù)進(jìn)行數(shù)據(jù)檢查,默認(rèn)讀取的參數(shù)值都是字符串
choices: 參數(shù)的可選值列表
required: 參數(shù)是否必須,對(duì)于位置參數(shù)來說,默認(rèn)為True,而可選參數(shù)默認(rèn)值為False
help: 參數(shù)簡(jiǎn)介,會(huì)在-h/--help指令下顯示出來
metavar: 在用法簡(jiǎn)介幫助信息里的參數(shù)名稱
dest: 參數(shù)在ArgumentParser.parse_args方法返回值中的屬性名
接下來就來分別看一下位置參數(shù)與可選參數(shù)的使用方法
位置參數(shù)
# argtest2.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('square', help='計(jì)算給定值的平方值', type=int)
args = parser.parse_args()
print(args.square**2)
# ----------------
# 測(cè)試腳本
# ----------------
$ python argtest2.py -h
usage: argtest2.py [-h] square
positional arguments:
square 計(jì)算給定值的平方值
optional arguments:
-h, --help show this help message and exit
$ python argtest2.py 4
16
# 給出錯(cuò)誤類型的參數(shù)
$ python argtest2.py four
usage: argtest2.py [-h] square
argtest2.py: error: argument square: invalid int value: 'four'
可選參數(shù)
# argtest3.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose',
help='控制輸出的可見性', action='store_true')
args = parser.parse_args()
if args.verbose:
print('可見性打開')
# ----------------
# 測(cè)試腳本
# ----------------
$ python argtest3.py -v
可見性打開
$ python argtest3.py
添加可選參數(shù)的時(shí)候,可以提供一個(gè)短參數(shù)選項(xiàng)(-v)和一個(gè)長(zhǎng)參數(shù)選項(xiàng)(--verbose),也可以省略短參數(shù)
action='store_true表示參數(shù)值儲(chǔ)存為True,即在命令行中提供參數(shù)時(shí)parser.parse_args獲取的參數(shù)值為True,否則為False
同時(shí)使用位置參數(shù)、可選參數(shù)
# argtest4.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('square', type=int, help="計(jì)算給定值的平方值")
parser.add_argument('-v', '--verbose', type=int, choices=[0, 1, 2],
default=0, help="如何顯示輸出結(jié)果")
args = parser.parse_args()
answer = args.square**2
if args.verbose >= 2:
print('{}的平方值是{}'.format(args.square, answer))
elif args.verbose >=1:
print('{}^2 = {}'.format(args.square, answer))
else:
print(answer)
# ----------------
# 測(cè)試腳本
# ----------------
$ python argtest4.py --help
usage: argtest4.py [-h] [-v {0,1,2}] square
positional arguments:
square 計(jì)算給定值的平方值
optional arguments:
-h, --help show this help message and exit
-v {0,1,2}, --verbose {0,1,2}
如何顯示輸出結(jié)果
$ python argtest4.py -v 0 4
16
$ python argtest4.py 4
16
$ python argtest4.py -v 1 4
4^2 = 16
$ python argtest4.py -v 2 4
4的平方值是16
沖突選項(xiàng)
有些選項(xiàng)的作用相反,不可以同時(shí)使用,為了加上這樣的限制,
可以使用ArgumentParser.add_mutually_exclusive_group方法
# argtest5.py
import argparse
parser = argparse.ArgumentParser(description='計(jì)算給定基數(shù)的冪')
group = parser.add_mutually_exclusive_group()
group.add_argument('-v', '--verbose', action='store_true')
group.add_argument('-q', '--quiet', action='store_true')
parser.add_argument('x', type=int, help='基數(shù)')
parser.add_argument('y', type=int, help='冪數(shù)')
args = parser.parse_args()
answer = args.x**args.y
if args.quiet:
print(answer)
elif args.verbose:
print('{}的{}次冪等于{}'.format(args.x, args.y, answer))
else:
print('{}^{} = {}'.format(args.x, args.y, answer))
# ----------------
# 測(cè)試腳本
# ----------------
$ python argtest5.py -h
usage: argtest5.py [-h] [-v | -q] x y
計(jì)算給定基數(shù)的冪
positional arguments:
x 基數(shù)
y 冪數(shù)
optional arguments:
-h, --help show this help message and exit
-v, --verbose
-q, --quiet
$ python argtest5.py 4 2
16
$ python argtest5.py 4 2 -q
16
$ python argtest5.py 4 2 -v
4的2次冪等于16
$ python argtest5.py 4 2 -qv
usage: argtest5.py [-h] [-v | -q] x y
argtest5.py: error: argument -v/--verbose: not allowed with argument -q/--quiet
參考鏈接: https://docs.python.org/3/howto/argparse.html
總結(jié)
以上是生活随笔為你收集整理的argparse 使用指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银行现在都很缺钱吗,为什么给的利息比以前
- 下一篇: 1000万贷款三年,到期一次性偿还150