官方Tutorial: https://docs.python.org/3/howto/argparse.html#id1
中文参考:https://www.cnblogs.com/dengtou/p/8413609.html
argparse:
the recommended command-line parsing module in the Python standard library.
- 1、定义:argparse是python标准库里面用来处理命令行参数的库
- 2、命令行参数分为位置参数(Positional arguments)和可选参数(Optional arguments):
位置参数就是程序根据该参数出现的位置来确定的
[root@localhost] ls root/ #其中root/是位置参数
可选参数是应用程序已经提前定义好的参数,不是随意指定的,一般会加上 - 或者 --
[root@localhost] ls -l # -l 就是ls命令里的一个选项参数
- 3、使用步骤:(1)import argparse 首先导入模块
(2)parser = argparse.ArgumentParser() 创建一个解析对象
(3)parser.add_argument() 向该对象中添加你要关注的命令行参数和选项
(4)parser.parse_args() 进行解析
- 4、 使用位置参数(Positional arguments)
先说结论,Positional arguments是必须传入的,否则报错
opt.py编辑:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('echo')
args = parser.parse_args()
print(args.echo)
命令行运行:
[baiyu] python opts.py
usage: opts.py [-h] echo
opts.py: error: the following arguments are required: echo
''' 缺失所需参数echo, Positional arguments是必须传入的 '''
[baiyu] python opts.py --help
usage: opts.py [-h] echo
positional arguments: ''' 位置参数 '''
echo
optional arguments: ''' 可选参数,可以看到,使用argparse后,会自动生成--help '''
-h, --help show this help message and exit
[baiyu] python opts.py foo
foo
上面的结果看起来已经可以了,使用--help以后,显示出了位置和选项参数,但是我们并不知道到echo是干什么用的,所以为了更加细致的操作,我们可以这样做:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('echo', help='"echo the string you use here"')
args = parser.parse_args()
print(args.echo)
命令行运行:
[baiyu] python opts.py -h
usage: opts.py [-h] echo
positional arguments:
echo "echo the string you use here"
optional arguments:
-h, --help show this help message and exit
还可以进行其他操作:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",
type = int) # 这里需要指定type,默认是str,否则报错
args = parser.parse_args()
print(args.square**2)
命令行运行:
[baiyu] python opts.py 4
16
- 5、使用可选参数(Optional arguments)
先说结论:
可选参数非必须传入,不传入该参数,执行程序完全没有问题(一般会设置一个默认值或为None)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
print("verbosity turned on")
[baiyu] python opts.py ''' 可不选Optional arguments '''
[baiyu] python opts.py --verbosity
usage: opts.py [-h] [--verbosity VERBOSITY]
opts.py: error: argument --verbosity: expected one argument
''' 需指定参数值 '''
[baiyu] python opts.py --verbosity 1
verbosity turned on
[baiyu] python opts.py -h
usage: opts.py [-h] [--verbosity VERBOSITY]
optional arguments:
-h, --help show this help message and exit
--verbosity VERBOSITY
increase output verbosity
从上面的程序看到,使用--verbosity参数时,需在后面指定参数值,这里由于没有限制,所以可以是任何值,在不指定的时候实际上默认为None,所以可以用if语句进行判断操作。
但这样并不好,应为你的参数总是瞎传,实际上有更好的方式去设置,比如可以设置参数类型,还有其他操作,我们举一个设置标志的方法:
mport argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", help="increase output verbosity",
action="store_true")
''' 可以看到这里,有action="store_true", 这样的话,使用--verbose,则为True, 不使用则为False,不用传其他值进去 '''
args = parser.parse_args()
if args.verbose:
print("verbosity turned on")
[baiyu] python opts.py # 不传为 False
[baiyu] python opts.py --verbose # 传为 True
verbosity turned on
[baiyu] python opts.py --verbose 1
usage: opts.py [-h] [--verbose]
opts.py: error: unrecognized arguments: 1
[baiyu] python opts.py -h
usage: opts.py [-h] [--verbose]
optional arguments:
-h, --help show this help message and exit
--verbose increase output verbosity
还可以指定参数类型,指定参数值:
parser.add_argument("-v", "--verbosity", type=int,
help="increase output verbosity")
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],
help="increase output verbosity")
- 6、Short options
实际上我们一般用的可选参数都没有上面那么长,都是使用简化后的参数,这个操作也很简单:
parser.add_argument("-v", "--verbose", help="increase output verbosity",
action="store_true")
[baiyu] python opts.py -h
usage: opts.py [-h] [-v]
optional arguments:
-h, --help show this help message and exit
-v, --verbose increase output verbosity
- 7、Combining Positional and Optional arguments 联合使用两种参数
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('squire', type=int,
help='display a squire of a given number')
parser.add_argument('-v', "--verbose", help="increase output verbosity",
action="store_true")
args = parser.parse_args()
answer = args.squire ** 2
if args.verbose:
print("the squire of {} equals {}".format(args.squire, answer))
else:
print(answer)
[baiyu] python opts.py ''' Positional arg必须传入 '''
usage: opts.py [-h] [-v] squire
opts.py: error: the following arguments are required: squire
[baiyu] python opts.py 4 ''' Optional arg可选 '''
16
[baiyu] python opts.py -v 4
the squire of 4 equals 16
[baiyu] python opts.py 4 -v ''' 两者顺序无所谓 '''
the squire of 4 equals 16
[baiyu] python opts.py -h
usage: opts.py [-h] [-v] squire
positional arguments:
squire display a squire of a given number
optional arguments:
-h, --help show this help message and exit
-v, --verbose increase output verbosity
- 8、其他一些操作
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
help="display a square of a given number")
parser.add_argument("-v", "--verbosity", action="count", default=0,
help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity >= 2:
print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity >= 1:
print("{}^2 == {}".format(args.square, answer))
else:
print(answer)
[baiyu] python opts.py 4
16
[baiyu] python opts.py 4 -v
4^2 == 16
[baiyu] python opts.py 4 -vv
the square of 4 equals 16
[baiyu] python opts.py 4 -vvv
the square of 4 equals 16
其他去看官网吧