浅笑の博客

我们的征途是星辰大海


  • 首页

  • 标签29

  • 分类6

  • 归档47

  • 留言板

  • 搜索

Python——argparse模块

发表于 2019-07-29 分类于 Python Valine: 本文字数: 3.6k

参考:http://vra.github.io/2017/12/02/argparse-usage/

argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数,当你的代码需要频繁地修改参数的时候,使用这个工具可以将参数和代码分离开来,让你的代码更简洁,适用范围更广。

基本框架

下面代码可以使用argparser从命令行获取用户名,然后打印’Hello ‘+ 用户名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# file-name:print_name.py
import argparse

def get_parser():
parser = argparse.ArgumentParser(description="Demo of argparse")
parser.add_argument('--name', default='Great')

return parser


if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
name = args.name
print('Hello {}'.format(name))

执行代码

1
2
$ python print_name.py --name Zheng
Hello Zheng

上面的代码段中,我们显示引入了argparser包,然后通过argparser.ArgumentParser函数生成argparser对象,其中这个函数的description函数表示在命令行显示帮助信息的时候,这个程序的描述信息。之后我们通过对象的add_argument函数来增加参数。这里我们只增加了一个—name的参数,然后后面的default参数表示如果没提供参数,我们默认采用的值。最后我们通过argpaser对象的parser_args函数来获取所有参数args,然后通过args.name的方式得到我们设置的—name参数的值,可以看到这里argparse默认的参数名就是—name形式里面—后面的字符串。整个流程就是这样。

default:没有设置值情况下的默认参数

如同上例中展示的,default表示命令行没有设置该参数的时候,程序中用什么值来代替。

required:表示这个参数是否一定需要设置

若设置了required=true,则在实际运行时不设置该参数将报错

parser.add_argument('-name', required=True)

则运行下面的命令会报错

1
2
3
$ python print_name.py
usage: print_name.py [-h] --name NAME
print_name.py: error: argument --name is required

type:参数类型

默认参数类型为str类型,若需要一个整数或者布尔参数类型,需要设置type=int或type=bool。

choices:参数值只能从几个选项里面选择

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# file-name: choices.py
import argparse

def get_parser():
parser = argparse.ArgumentParser(
description='choices demo')
parser.add_argument('-arch', required=True, choices=['alexnet', 'vgg'])

return parser

if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
print('the arch of CNN is '.format(args.arch))

如果像下面这样执行会报错:

1
2
3
$ python choices.py -arch resnet
usage: choices.py [-h] -arch {alexnet,vgg}
choices.py: error: argument -arch: invalid choice: 'resnet' (choose from 'alexnet', 'vgg')

help:指定参数的说明信息

在现实帮助信息的时候,help参数的值可以给使用工具的人提供该参数是用来设置什么的说明,对于大型的项目,help参数和很有必要的,不然使用者不太明白每个参数的含义,增大了使用难度。下面是个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# file-name: help.py
import argparse

def get_parser():
parser = argparse.ArgumentParser(
description='help demo')
parser.add_argument('-arch', required=True, choices=['alexnet', 'vgg'],
help='the architecture of CNN, at this time we only support alexnet and vgg.')

return parser


if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
print('the arch of CNN is '.format(args.arch))

在命令行加-h或—help参数运行该命令,获取帮助信息的时候,结果如下:

1
2
3
4
5
6
7
8
9
$ python help.py -h
usage: help.py [-h] -arch {alexnet,vgg}

choices demo

optional arguments:
-h, --help show this help message and exit
-arch {alexnet,vgg} the architecture of CNN, at this time we only support
alexnet and vgg.

dest:设置参数在代码中的变量名

argparse默认的变量名是--或-后面的字符串,但是你也可以通过dest=xxx来设置参数的变量名,然后在代码中用args.xxx来获取参数的值。

nargs: 设置参数在使用可以提供的个数

使用方式如下:

parser.add_argument('-name', nargs=x)

x的选值和含义:

值 含义
N 参数的绝对个数
‘?’ 0或1一个参数
‘*’ 0或所有参数
‘+’ 所有,并且至少一个参数

如下例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# file-name: nargs.py
import argparse

def get_parser():
parser = argparse.ArgumentParser(
description='nargs demo')
parser.add_argument('-name', required=True, nargs='+')

return parser


if __name__ == '__main__':
parser = get_parser()
args = parser.parse_args()
names = ', '.join(args.name)
print('Hello to {}'.format(names))

执行命令和结果如下:

1
2
$ python nargs.py -name A B C
Hello to A, B, C

Python库
python——with语句和contextlib模块
论文阅读笔记3:Selective Kernel Networks
Zheng Yujie

Zheng Yujie

C++/Python/深度学习
47 日志
6 分类
29 标签
目录
  1. 1. 基本框架
  2. 2. default:没有设置值情况下的默认参数
  3. 3. required:表示这个参数是否一定需要设置
  4. 4. type:参数类型
  5. 5. choices:参数值只能从几个选项里面选择
  6. 6. help:指定参数的说明信息
  7. 7. dest:设置参数在代码中的变量名
  8. 8. nargs: 设置参数在使用可以提供的个数
© 2019 Zheng Yujie | 全站共199k字
浙ICP备 - 19035016号
0%