python命令行参数解析--argparse模块

参考:
官方教程:https://docs.python.org/3.6/library/argparse.html
参考博客:https://www.cnblogs.com/arkenstone/p/6250782.html
此模块可以在命令行执行python文件时,为用户输入的参数提供接口,并且能对非法输入进行提示。更全面的使用解析详见官方文档,在这里只提供常用的命令。

导入模块,并且创建对象

description常用语描述脚本的用途,可以为空

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')

参数输入,后面的名字和参数与终端输入的效果一样,在终端是用空格分开,这里使用一个列表存储多个字符串。

parser.parse_args(['--fo', '1'])

在对象里添加参数:

使用.add_argument()方法,有如下属性:
ArgumentParser.add_argument(name or flags…[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
在这里插入图片描述
1.name or flags
对于位置参数(positional argument),此时的变量名就是bar。此时必须用户进行值的输入,且不用指定名字,按照顺序来即可。此时很多用在optional argument上属性不能直接指定,如dest,required等。

parser.add_argument('bar')

对于可选参数( optional argument ),通常在变量名前加-或–,:此时可以指定默认值来不需要用户输入。

parser.add_argument('-f', '--foo')

此时使用-f--foo都可以,变量名是ffoo

parser.add_argument('--lr', '--learning-rate')
_StoreAction(option_strings=['--lr', '--learning-rate'], dest='lr', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)

此时使用--lr--learning-rate都可以指向这个变量,变量名是dest中存储的lr。注意,name里的变量名‘-’相连符就会转变为下划线‘_’,比如如下:

>>> parser.add_argument('--learning-rate')
_StoreAction(option_strings=['--learning-rate'], dest='learning_rate', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)

2.action
可以设置’store_true’ and ‘store_false’,表明默认值是True或者False

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
_StoreTrueAction(option_strings=['--foo'], dest='foo', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args(['--foo'])
Namespace(foo=True)
>>> parser.parse_args([])
Namespace(foo=False)

当指定--foo但是却不输入值时,会设定其值为const存储的值;当不指定--foo时,就是默认值default,而且会是与const相反的布尔值。
3.default
通过default属性来设置默认值:

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', default=42)
_StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default=42, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args([])
Namespace(foo=42)

使用type属性来确定数据类型:

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', default=42, type=int)
_StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default=42, type=<class 'int'>, choices=None, help=None, metavar=None)
>>> parser.parse_args(['--foo', '2'])
Namespace(foo=2)

4.choices
此属性用于限制所取的值在给定的范围内。

>>>parser = argparse.ArgumentParser(prog='game.py')
>>> parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
_StoreAction(option_strings=[], dest='move', nargs=None, const=None, default=None, type=None, choices=['rock', 'paper', 'scissors'], help=None, metavar=None)
>>> parser.parse_args(['rock'])
Namespace(move='rock')
>>> parser.parse_args(['fire']) # 非法输入
usage: game.py [-h] {rock,paper,scissors}
game.py: error: argument move: invalid choice: 'fire' (choose from 'rock', 'paper', 'scissors')

5.required
此属性用来限制可选参数必须进行输入,即使设置了default值也不行。注意位置参数(positional argument)因为必须进行输入,所以不能存在此属性。

parser.add_argument('--foo', default=3, required=True)
_StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default=3, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args([])
usage: [-h] --foo FOO
: error: the following arguments are required: --foo
>>> parser.parse_args(['--foo', 'BAR'])
Namespace(foo='BAR')

6.help
显示每个参数的帮助信息。在终端输入-h或–help时可以显示。

>>> parser.add_argument('--foo', help='foo the bars')
_StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help='foo the bars', metavar=None)
>>> parser.parse_args(['-h'])
usage: frobble [-h] [--foo FOO]

optional arguments:
  -h, --help  show this help message and exit
  --foo FOO   foo the bars

7.metavar
给参数起一个别名,名字只在展示help信息的时候会显示,在parse_args()对象中的属性名字依然由dest值决定。

>>> parser.add_argument('--foo', metavar='YYY')
_StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar='YYY')
>>> parser.parse_args(['-h'])
usage: PROG [-h] [--foo YYY]

optional arguments:
  -h, --help  show this help message and exit
  --foo YYY

8.dest
dest可以显示地指定变量名,之前都是通过在name里提取---来赋给dest。

>>> parser.add_argument('--foo', dest='bar')
_StoreAction(option_strings=['--foo'], dest='bar', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args(['--foo', 'XXX'])
Namespace(bar='XXX')

实例

对一个python文件进行实际命令行运行:
test.py文件:

import argparse

parser = argparse.ArgumentParser\
    (description='PyTorch Condensed Convolutional Networks')
# 位置参数positional argument,必须进行输入,且不能设置dest属性
parser.add_argument('data',  metavar='DIR', help='path to dataset')
# 可选参数,optional argument
parser.add_argument('--model', default='condensenet', type=str, metavar='M')
parser.add_argument('--lr-type', dest='lr_type', default='cosine',
                    type=str, metavar='T',
                    help='learning rate strategy (default: cosine)',
                    choices=['cosine', 'multistep'])
# 获取Namespace对象
args = parser.parse_args()
print(args)
print(args.data)
print(args.lr_type)
print(args.model)

运行:python xxx.py CIFAR10
输出:

Namespace(data='CIFAR10', lr_type='cosine', model='condensenet')
CIFAR10
cosine
condensenet
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页