一、模块简介
argparse是python中的一个常用模块,和sys.argv()功能类似,主要用于编写命令行接口:对于程序所需要的参数,它可以进行正确的解析。此外,argparse可以自动的生成help(帮助)和usage(用法)信息,当程序的参数无效时,可以自动生成错误信息。
import agparse
二、argparse三个主要函数
1、parser=argparse.ArgumentParser()
ArgumentParser对象保存了所有必须的信息,用于将命令行参数解析为相应的python数据类型。
ArgumentParse对象:
class argparse ArgumentParser(
prog=None,#程序文件名,defaulf:sys.argv[0]
usage=None,#用法-程序使用说明,defaulf:从添加到解析器的参数生成
description=None,#描述-程序目的说明,在参数之前显示的文本;default:None
epilog=None,#结语-程序说明后记,参数help后显示的文本;default:None
parents=[],#父类-ArgumentParser对象的列表,其他参数也应该包括在内;default:[]
formatter_class=argparse.HelpFormatter, #格式的类-用于自定义帮助输出的类help信息的说明格式
prefix_chars='-",#前缀字符-命令函参数的前缀;defaulf:‘-’
fromfile_prefix_chars=None, #来自文件的前缀字符-应该读取其他参数的前缀文件的字符集;default:None
default:None,
argument_default=None, #参数默认-参数的全局默认值;default:None
conflict_handler='error',#冲突处理-解决冲突选项的策略,通常时不必要的;default:‘erroe’
default:'erroe',
add_help=True, #增加帮助-是否增加help选项;default:True
allow_abbrev=True #允许使用缩写-是否使用参数的缩写;default:True
)
例句
parser=argparse.ArgumentParser(description='Process some integers')
2、parser.add_argument()
add_argument()函数是向ArgumentParser对象添加命令行参数信息,这些信息告诉ArgumentParser对象如何处理命令行参数。可以通过调用parse_agrs()来使用这些命令行参数,将会返回一个对象。
ArgumentParser.add_argument(
name,or flags,#参数名或者参数标识;带有--的为可选参数(optional parameter);不带--的为必选参数(positional parameter)
action,#参数的处理方法,在命令行遇到此参数时要采取的基本操作类型
nargs,#参数的数量,应该使用的命令行参数的数量
const,#参数的常量值,某些动作和选择所需的常量值
default,#参数的默认值,如果命令行不存在的参数,则生成的值
type,#参数的数据类型,应转换命令行参数类型
choices,#参数的取值范围,参数允许值的范围
requires,#参数是否可以忽略不写,可选参数有效
help,#参数的说明信息,简单描述参数的作用
metavar,#参数在说明信息usage(用法)中的名称,用法消息中的名称
dest#对象的属性名,要添加到返回值的对象的属性的名称
)
例句
parser.add_argument('--learning_rate',type=float,default='0.001',help='initial learning rate [default:0.001]')
3、args = parser.parse_args()
通过调用parse_args()函数来解析ArgumentParser对象中保存的命令行参数:将命令行参数解析成相应的数据类型并采取相应的动作,返回一个Namespace对象。
ArgumentParser.parse_args(args=None,namespace=None)
args:字符串列表,默认来自sys.argv
namespace:对象名,默认是一个空的Namespace对象
例句
args = parser.parse_args().learning_rate
三、具体例子说明
1、使用IDE来运行
#这个是使用带有默认值的,可以在Pycharm等IDE中直接运行
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--GPU', type=int, default=0, help='GPU to use[default : GPU 0]')
parser.add_argument('--model', default='pointnet_cls', help='Model name:pointnet_cls or pointnet_cls_basic[default: pointnet_cls]')
parser.add_argument('--log_dir', default='log', help='log dir[default: log]')
parser.add_argument('--num_point', type=int, default='1024', help='point number[256/512/1024/2048] [default: 1024]')
parser.add_argument('--max_epoch', type=int, default='250', help='epoch to run[default: 250]')
parser.add_argument('--batch_size', type=int, default='32', help='batch size during training[default: 32]')
parser.add_argument('--learning_rate', type=float, default='0.001', help='initial learning rate [default:0.001]')
parser.add_argument('--momentum', type=float, default='0.9', help='initial learning rate [default: 0.9]')
parser.add_argument('--optimizer', default='adam', help='adam or momentum [default:adam]')
parser.add_argument('--decay_step', type=int, default='200000', help='decay step for lr decay [default:200000]')
parser.add_argument('--decay_rate', type=float, default='0.7', help='decay rate for lr decay[default:0.7]')
flags = parser.parse_args()
GPU_index = flags.GPU
print(GPU_index)
MODEL = flags.model
print(MODEL)
LOG_DIR = flags.log_dir
print(LOG_DIR)
NUM_POINT = flags.num_point
print(NUM_POINT)
MAX_EPOCH = flags.max_epoch
print(MAX_EPOCH)
BATCH_SIZE = flags.batch_size
print(BATCH_SIZE)
LEARNING_rate = flags.learning_rate
print(LEARNING_rate)
MOMENTUM = flags.momentum
print(MOMENTUM)
OPTIMIZER = flags.optimizer
print(OPTIMIZER)
DECAY_STEP = flags.decay_step
print(DECAY_STEP)
aa = parser.parse_args().decay_rate
print(aa)
输出为
0
pointnet_cls
log
1024
250
32
0.001
0.9
adam
200000
2、使用命令行来运行
进入你想要运行的*py文件的目录,使用 ctrl + 鼠标右键 进入命令行窗口
键入命令
python xxx.py -h
python xxx.py
python xxx.py --GPU 2
python xxx.py --GPU 2 --model qqq