2019年12月23日 / 2,764次阅读 / Last Modified 2019年12月23日
argparse模块
argparse模块的add_argument函数,实现增加一个命令行参数的功能。默认情况下,一个命令行参数对应一个值。而add_argument函数有一个nargs参数,通过此参数,可以实现命令行同一个参数的多值输入,以及不确定数量的多值输入。
下面分情况来说明nargs参数不同取值的使用效果。
N表示一个整数,nargs后的整数,必须大于0.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--one', nargs=1, required=True)
args = parser.parse_args()
print(args.one)
nargs=1,表示one参数只能而且必须有1个数值输入。
E:\py>python arg.py --one 1
['1']
E:\py>python arg.py --one 1 2 3
usage: arg.py [-h] --one ONE
arg.py: error: unrecognized arguments: 2 3
只有一个数值输入,但args.one也是一个list。下面我们让nargs=3试试看:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--three', nargs=3, required=True)
args = parser.parse_args()
print(args.three)
这时,--three后面就必须有3个数值输入:
E:\py>python arg.py --three 1 2 3
['1', '2', '3']
E:\py>python arg.py --three 1 2 3 4 5
usage: arg.py [-h] --three THREE THREE THREE
arg.py: error: unrecognized arguments: 4 5
E:\py>python arg.py --three 1 2
usage: arg.py [-h] --three THREE THREE THREE
arg.py: error: argument --three: expected 3 arguments
必须有3个数值跟在--three参数后面,否则就出错。
这个?表示的含义,与正则表达式里的?一样,即0个或1个的意思。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--zeroOne', nargs='?', required=True)
args = parser.parse_args()
print(args.zeroOne)
下面是运行效果:
E:\py>python arg.py --zeroOne 1
1
E:\py>python arg.py --zeroOne
None
E:\py>python arg.py --zeroOne 1 2
usage: arg.py [-h] --zeroOne [ZEROONE]
arg.py: error: unrecognized arguments: 2
当有2个数值跟--zeroOne参数时,出错;0个和1个都对,不过要注意,1个数值时,返回的不是list,0个时,返回的是None。
这个 * 表示的含义,与正则表达式里的 * 一样,即0个或多个的意思。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--zeroMore', nargs='*', required=True)
args = parser.parse_args()
print(args.zeroMore)
运行效果如下:
E:\py>python arg.py --zeroMore
[]
E:\py>python arg.py --zeroMore 1
['1']
E:\py>python arg.py --zeroMore 1 2 3 4 5
['1', '2', '3', '4', '5']
注意,使用nargs='*',解析出来的参数是一个list,还可以为空。
还有个细节,当nargs='*'时,argparse模块是通过输入前面是否有 - or -- 来判断是否为下一个参数!请看如下示例,当输入为-k时,-k本身并没有被认为是--zeroMore的一个数值输入。
E:\py>python arg.py --zeroMore 1 2 3 4 5 -k
usage: arg.py [-h] --zeroMore [ZEROMORE [ZEROMORE ...]]
arg.py: error: unrecognized arguments: -k
这个 + 表示的含义,与正则表达式里的 + 一样,即1个或多个的意思。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--oneMore', nargs='+', required=True)
args = parser.parse_args()
print(args.oneMore)
运行效果跟nargs='*'几乎一样:
E:\py>python arg.py --oneMore
usage: arg.py [-h] --oneMore ONEMORE [ONEMORE ...]
arg.py: error: argument --oneMore: expected at least one argument
E:\py>python arg.py --oneMore 1
['1']
E:\py>python arg.py --oneMore 1 2 3 4 5
['1', '2', '3', '4', '5']
E:\py>python arg.py --oneMore 1 2 3 4 5 -k
usage: arg.py [-h] --oneMore ONEMORE [ONEMORE ...]
arg.py: error: unrecognized arguments: -k
这是一个很有趣的参数类型,当nargs=argparse.REMAINDER时,解决了前面提到的当输入为 - or -- 开始时,argparse自动判断为下一个命令行参数的问题。从字面含义看,后面所有的输入,都是前面那个参数的数值输入。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--remainder', nargs=argparse.REMAINDER, required=True)
args = parser.parse_args()
print(args.remainder)
运行效果如下:
E:\py>python arg.py --remainder
[]
E:\py>python arg.py --remainder 1
['1']
E:\py>python arg.py --remainder 1 2 3 4 5
['1', '2', '3', '4', '5']
E:\py>python arg.py --remainder 1 2 3 4 5 -k 1 2 3 4 5
['1', '2', '3', '4', '5', '-k', '1', '2', '3', '4', '5']
E:\py>python arg.py --remainder ls -lh
['ls', '-lh']
请看以上示例的最后一次运行情况,使用nargs=argparse.REMAINDER,可以通过命令行,输入一个命令行工具,进而调用。
以上就是对add_argument函数nargs参数使用的全部介绍。
-- EOF --
本文链接:https://www.pynote.net/archives/1621
《用add_argument函数的nagrs参数实现命令行多值参数》有2条留言
前一篇:python基金会如何募资?
后一篇:十六进制字符串hexstr的计算
Ctrl+D 收藏本页
©Copyright 麦新杰 Since 2019 Python笔记
测试了一下固定位置的参数与nargs='?'的配合,固定位置参数就变成可不输入的参数了! [ ]
应该是命令行的最后一个参数,使用argparse.REMAINDER [ ]