Python实用模块之argparse

  • 时间:
  • 浏览:
  • 来源:互联网

argparse模块是python自带的命令行参数解析包,可以用来方便地读取命令行参数。当你的代码需要频繁地修改参数的时候,使用argparse可以将参数和代码分离开来,让你的代码更简洁,适用范围更广。argparse模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时给出错误信息。

代码示例

这里以 [YOLOv5目标检测]中的detect.py为例,来看看argparse的基本用法

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="工程编译工具")  创造一个解析对象parser,这差不多就是一个装载参数的容器。可以给这个对象写一个描述,描述一下这个解析对象。
		给这个解析对象添加几个命令行参数。
		参数名字前面加上--,这就表示这是个选择性参数optional arguments。不加上--那就是必须填的位置参数positional arguments。也可以在--参数名前面加上-,设定参数的简短形式。比如'-r',当调用-参数名,其实就是调用后面的--参数名。 好处:有了这些flag,我们就可以随意改变他们的顺序。
    parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)')
    parser.add_argument('--source', type=str, default='inference/images', help='source')  # file/folder, 0 for webcam
    parser.add_argument('--output', type=str, default='inference/output', help='output folder')  # output folder
    parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')
    parser.add_argument('--conf-thres', type=float, default=0.4, help='object confidence threshold')
    parser.add_argument('--iou-thres', type=float, default=0.5, help='IOU threshold for NMS')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--view-img', action='store_true', help='display results')
    parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')
    parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --class 0, or --class 0 2 3')
    parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')
    parser.add_argument('--augment', action='store_true', help='augmented inference')
    parser.add_argument('--update', action='store_true', help='update all models')
    opt = parser.parse_args()   利用opt对象,给这些命令行参数传递数值。就是在这个.py模块执行的的后面 添加自己传入的值。
    print(opt)   上面所设置的命令行参数,都变成了opt对象的属性了。

    with torch.no_grad():
        if opt.update:  # update all models (to fix SourceChangeWarning)
            for opt.weights in ['yolov5s.pt', 'yolov5m.pt', 'yolov5l.pt', 'yolov5x.pt']:
                detect()
                strip_optimizer(opt.weights)
        else:
            detect()

对上述代码稍微解释一下。第一步是创建一个ArgumentParser对象,这个对象包含将命令行解析成python数据类型所需的全部信息。

parser = argparse.ArgumentParser()

接下来,可以通过add_argument()方法来给parser对象添加程序参数信息了。

parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)')
像这样对象.方法调用。每一行,增加一个参数。

add_argument方法声明

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

它定义单个的命令行参数应当如何解析。每个形参的含义如下

  • name or flags - 一个命名或者一个选项字符串的列表,例如 weightw, -weight 。第一个就是参数名称。后面是对应的属性。
  • action - 当参数在命令行中出现时使用的动作基本类型。store_truestore_falsestore_const分别用作存储TrueFalse值的特殊用例,它们的默认值分别为FalseTrue
  • nargs - 命令行参数(就是Python模块后面输入的参数)应当消耗的数目,可选值为:? 表示0或1个参数,* 表示0或所有参数;+ 表示至少一个参数。
  • const - 被一些actionnargs选择所需求的常数
  • default - 当参数未在命令行中出现时使用的默认值。
  • type - 被传入参数需要被转换成的数据类型,默认数据类型是str
  • choices - 参数值只能从几个选项里面选择
  • required - 此命令行选项表示命令行参数是否可省略,设置为True,当没有传入命令行参数时,会有提示信息把未输入的命令行参数输入;不设置的话,不传入命令行参数,会直接报错。
  • help - 此选项作用是简单描述,就是来写帮助信息,是字符串。
  • metavar - 在使用方法消息中使用的参数值示例
  • dest - 设置参数在代码中的变量名

最后一步,parser通过parse_args()方法解析参数,将参数字符串转换为对象并将其设为命名空间的属性,返回带有成员的命名空间。

opt = parser.parse_args()

得到了opt后,就可以去获取对应参数对应的值了。比如就可以通过opt.weights访问weights文件路径,opt.img-size访问图片的大小。

如果不知道脚本如何使用,可以使用python detect.py -hpython detect.py --help来查看detect.py脚本支持的参数以及对应的帮助信息

(yolov5v3) xugaoxiang@1070Ti:~/Works/github/yolov5_v3/yolov5-3.0$ python detect.py -h
usage: detect.py [-h] [--weights WEIGHTS [WEIGHTS ...]] [--source SOURCE]
                 [--output OUTPUT] [--img-size IMG_SIZE]
                 [--conf-thres CONF_THRES] [--iou-thres IOU_THRES]
                 [--device DEVICE] [--view-img] [--save-txt]
                 [--classes CLASSES [CLASSES ...]] [--agnostic-nms]
                 [--augment] [--update]

optional arguments:
  -h, --help            show this help message and exit    -h是模块默认持有的。
  --weights WEIGHTS [WEIGHTS ...]
                        model.pt path(s)
  --source SOURCE       source
  --output OUTPUT       output folder
  --img-size IMG_SIZE   inference size (pixels)
  --conf-thres CONF_THRES
                        object confidence threshold
  --iou-thres IOU_THRES
                        IOU threshold for NMS
  --device DEVICE       cuda device, i.e. 0 or 0,1,2,3 or cpu
  --view-img            display results
  --save-txt            save results to *.txt
  --classes CLASSES [CLASSES ...]
                        filter by class: --class 0, or --class 0 2 3
  --agnostic-nms        class-agnostic NMS
  --augment             augmented inference
  --update              update all models

参考资料

  • https://docs.python.org/3/library/argparse.html

本文链接http://www.dzjqx.cn/news/show-617233.html