python argparse模块

argparse模块是python用于解析命令行参数,比如python train.py --lr 0.1,这个值为0.1的lr参数只能通过argparse模块传递给python程序内部。

一般过程:

  import argparse                

  parser = argparse.ArgumentParser()      

  parser.add_argument()              

  parser.parse_args() 调用parse_args()方法进行解析,解析成功之后即可使用

参数可以分为定位参数和可选参数两种:

  定位参数:

    默认是必需的,可以类比函数中不带默认值的参数,因此调用时按顺序读入的参数与设置好的定位参数一一对应,不需要添加“-”来指示参数名称。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("hello")
args = parser.parse_args()
arg1 = args.hello

像这样便定义了一个hello参数,解析后的参数存放在了args.hello里,这里赋给了arg1

  可选参数:

    有下面两种方式:

    1.通过-来指定短参数,比如-h

    2.通过来指定长参数,比如--help

    上面的两种方式可以共存,也可以只存在一个。自己的理解:短参数和长参数的区别是短参数后面接的命名字母少(1个),长参数后面接的命名字母长

action:参数出发的动作

有6种,默认是store,存储值到默认变量

1.parser.add_argument('-b', action="store", dest="b")

2.parser.add_argument('-b', action="store", dest="b",default=1,type=int)

1这种情况,如果没有在命令行给定b值,那最终内部程序也无法获得这个参数的值(访问参数会变为none);2这种情况,即使命令行没有给定b的值,并且也不需要-b来表示,都可以把值赋给b,因为默认采用action store,就把default的值赋过去了。并且这种使用default还有一个好处,如果你不需要改变这个参数的值,就不用在命令行输入,如果需要改变了,再在命令行直接改值就好了。

3.parser.add_argument('-b', action="store",dest="b",default=1,type=int)


4.parser.add_argument('--use_tfb', dest='use_tfboard',help='whether use tensorboard',action='store_true')

上述的1、2其实都是使用的action store,可以不在里面写明action="store"这种东西。对于action store_true,使用方式是在命令直接添加长短参数,即:--use_tfb(后面不接任何参数,因为本身这个赋值就只能true false),这样use_tfb被赋值为true;不在命令行中添加--use_tfb,use_tfb的参数就为false(不会出现这个参数没有值变为none,而是赋值为false)

  parser.add_argument('--o', dest='optimizer',
                      help='training optimizer',
                      default="sgd", type=str)

如果提供dest参数,参数值就保存为命令行参数解析时返回的命名空间对象中名为该 dest 参数值的一个属性,也就是说dest是解析后的参数名称。解析后,在程序内部访问这个参数就使用dest的名称,而不再是长参数的名称。如果没有dest,就用长参数去掉--,即上面的字母‘o’。

1.在运行命令行时用--o

2/程序内部需要访问这个参数时使用optimizer

以后看程序怎么运行就可以看argparse模块在代码中是如何设置的

原文地址:https://www.cnblogs.com/ymjyqsx/p/10071963.html