代码编织梦想

主要代码

import argparse                     # 导入模板

parser = argparse.ArgumentParser()  # 创建parser

parser.add_argument()               # 添加参数

args = parser.parse_args()          # 参数解析

ArgumentParser的可选参数

class argparse.ArgumentParser(
    prog=None,                  # 设定程序名称 (defaul: sys.argv[0])
    usage=None,                 # 替换默认的Usage信息
    description=None,           # 程序简要信息说明(参数说明前)
    epilog=None,                # 附加信息说明(参数说明后)
    parents=[],                 # 继承父解析器(parser)
    formatter_class=argparse.HelpFormatter,     # 自定义帮忙信息显示格式(4种)
    prefix_chars='-',           # 参数前缀符号(默认为-,如:-h/--help)
    fromfile_prefix_chars=None, # 从文件中引用参数(与在命令行直接写作用一致,解决参数过多的情况)
    argument_default=None,      # 可设置argparse.SUPPRESS阻止默认参数默认值
    conflict_handler='error',   # 参数冲突处理
    add_help=True,              # 帮助信息中默认添加"-h, --help"描述
    allow_abbrev=True           # 允许参数缩写
)

add_argument的可选参数

ArgumentParser.add_argument(
    name or flags...    # 选项的名称或列表,例如:foo/-f/--foo
    [, action]      # 采取的基本操作
        store(默认)         存储参数值
        store_const        使用该字符串选项时,取用const值
        store_true         使用该字符串选项时,参数值置为True
        store_false        使用该字符串选项时,参数值置为False
        append             同一个命令行中多次使用该字符串选项时,以追加的方式将值添加到list中
        append_const       将多个字符串选项的const值合并到一个list
        count              统计选项出现的次数 (如:"-vvv",则最终值为3)
        help               parser默认会添加一个help action。(一般不用理会)
        version            打印版本信息
        也可以自定义action类
    [, nargs]       # 该参数值要求的数量
                    数值       指明参数个数
                    ?         提供了参数则取参数值;
                                    无参数但声明了选项字符串则取const值;
                                    无参数也未声明选择字符串则取default值
                    *         所有参数存入list
                    +         与*类似,但参数个数不能为空
                    argparse.REMAINDER  原封不动的记录参数到list中,通常用于将这些参数传递到其它的命令行工具。
    [, const]       # action/nargs部分要求的常值
                        1、当action="store_const"或者"append_const"时需要设置
                        2、当选项为(-f/--foo),nargs='?',同时未提供具体参数时,取用该值。
    [, default]     # 参数默认值
    [, type]        # 参数类型(内建参数或者函数,也可是自定义函数)
    [, choices]     # 允许的参数值(白名单),tuple/range
    [, required]    # 选项是否必须,设置为True表示选项必填。
    [, help]        # 参数说明,可以用其它类似 %(prog)s 格式调用prog值;可设置argparse.SUPPRESS使该选项在帮助信息中不可见。
    [, metavar]     # 定义参数在Usage信息中的名称
    [, dest]        # 解析后的属性名称
)

也可以自定义action

class argparse.Action(option_strings, dest, nargs=None, const=None, 
default=None, type=None, choices=None, required=False, help=None, metavar=None)

#args=None, 程序将sys.argv作为参数代入
args = parse.parse_args()              

#给args赋值,跳过sys.argv,主要用于测试工作,避免每次运行都输入冗长的参数。
args = parser.parse_args(['1', '2', '3', '4'])

# namespace=custom_class,将属性分配到一个已经存在的对象中。
parser.parse_args(args=['--foo', 'BAR'], namespace=custom_class99)

vars()方法变成字典

# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--n_epochs", type=int, default=200,
                    help="number of epochs of training")
parser.add_argument("--batch_size", type=int, default=64,
                    help="size of the batches")
parser.add_argument("--lr", type=float, default=0.0002,
                    help="adam: learning rate")
parser.add_argument("--b1", type=float, default=0.5,
                    help="adam: decay of first order momentum of gradient")
opt = parser.parse_args()
print('原生opt')
print(opt)

print('通过vars()变成字典')
print(vars(opt))
bfcb3b0ec5564fd017e0a410f3aea4e4.png

easydict超级好用

from easydict import EasyDict

将字典重新转换回namespace
"""
    Get attributes

    >>> d = EasyDict({'foo':3})
    >>> d['foo']
    3
    >>> d.foo
    3
    >>> d.bar
    Traceback (most recent call last):
    ...
    AttributeError: 'EasyDict' object has no attribute 'bar'

    Works recursively

    >>> d = EasyDict({'foo':3, 'bar':{'x':1, 'y':2}})
    >>> isinstance(d.bar, dict)
    True
    >>> d.bar.x
    1

    Bullet-proof

    >>> EasyDict({})
    {}
    >>> EasyDict(d={})
    {}
    >>> EasyDict(None)
    {}
    >>> d = {'a': 1}
    >>> EasyDict(**d)
    {'a': 1}
    >>> EasyDict((('a', 1), ('b', 2)))
    {'a': 1, 'b': 2}
    
    Set attributes

    >>> d = EasyDict()
    >>> d.foo = 3
    >>> d.foo
    3
    >>> d.bar = {'prop': 'value'}
    >>> d.bar.prop
    'value'
    >>> d
    {'foo': 3, 'bar': {'prop': 'value'}}
    >>> d.bar.prop = 'newer'
    >>> d.bar.prop
    'newer'


    Values extraction

    >>> d = EasyDict({'foo':0, 'bar':[{'x':1, 'y':2}, {'x':3, 'y':4}]})
    >>> isinstance(d.bar, list)
    True
    >>> from operator import attrgetter
    >>> list(map(attrgetter('x'), d.bar))
    [1, 3]
    >>> list(map(attrgetter('y'), d.bar))
    [2, 4]
    >>> d = EasyDict()
    >>> list(d.keys())
    []
    >>> d = EasyDict(foo=3, bar=dict(x=1, y=2))
    >>> d.foo
    3
    >>> d.bar.x
    1

    Still like a dict though

    >>> o = EasyDict({'clean':True})
    >>> list(o.items())
    [('clean', True)]

    And like a class

    >>> class Flower(EasyDict):
    ...     power = 1
    ...
    >>> f = Flower()
    >>> f.power
    1
    >>> f = Flower({'height': 12})
    >>> f.height
    12
    >>> f['power']
    1
    >>> sorted(f.keys())
    ['height', 'power']

    update and pop items
    >>> d = EasyDict(a=1, b='2')
    >>> e = EasyDict(c=3.0, a=9.0)
    >>> d.update(e)
    >>> d.c
    3.0
    >>> d['c']
    3.0
    >>> d.get('c')
    3.0
    >>> d.update(a=4, b=4)
    >>> d.b
    4
    >>> d.pop('a')
    4
    >>> d.a
    Traceback (most recent call last):
    ...
    AttributeError: 'EasyDict' object has no attribute 'a'
    """

参考样例

站在巨人的肩膀上

样例一:定义及使用

from: https://github.com/SwinTransformer/Swin-Transformer-Semantic-Segmentation/blob/main/tools/train.py
def parse_args():
    parser = argparse.ArgumentParser(description='Train a segmentor')
    parser.add_argument('config', help='train config file path')
    parser.add_argument('--work-dir', help='the dir to save logs and models')
    parser.add_argument(
        '--load-from', help='the checkpoint file to load weights from')
    parser.add_argument(
        '--resume-from', help='the checkpoint file to resume from')
    parser.add_argument(
        '--no-validate',
        action='store_true',
        help='whether not to evaluate the checkpoint during training')
    group_gpus = parser.add_mutually_exclusive_group()
    group_gpus.add_argument(
        '--gpus',
        type=int,
        help='number of gpus to use '
        '(only applicable to non-distributed training)')
    group_gpus.add_argument(
        '--gpu-ids',
        type=int,
        nargs='+',
        help='ids of gpus to use '
        '(only applicable to non-distributed training)')
    parser.add_argument('--seed', type=int, default=None, help='random seed')
    parser.add_argument(
        '--deterministic',
        action='store_true',
        help='whether to set deterministic options for CUDNN backend.')
    parser.add_argument(
        '--options', nargs='+', action=DictAction, help='custom options')
    parser.add_argument(
        '--launcher',
        choices=['none', 'pytorch', 'slurm', 'mpi'],
        default='none',
        help='job launcher')
    parser.add_argument('--local_rank', type=int, default=0)

    return args

# 怎么使用解析后的参数
def main():
    args = parse_args()

    cfg = Config.fromfile(args.config)
    if args.options is not None:
        cfg.merge_from_dict(args.options)
    # set cudnn_benchmark
    if cfg.get('cudnn_benchmark', False):
        torch.backends.cudnn.benchmark = True

    # work_dir is determined in this priority: CLI > segment in file > filename
    if args.work_dir is not None:
        # update configs according to CLI args if args.work_dir is not None
        cfg.work_dir = args.work_dir
    elif cfg.get('work_dir', None) is None:
        # use config filename as default work_dir if cfg.work_dir is None
        cfg.work_dir = osp.join('./work_dirs',
                                osp.splitext(osp.basename(args.config))[0])
    if args.load_from is not None:
        cfg.load_from = args.load_from
    if args.resume_from is not None:
        cfg.resume_from = args.resume_from
    if args.gpu_ids is not None:
        cfg.gpu_ids = args.gpu_ids
    else:
        cfg.gpu_ids = range(1) if args.gpus is None else range(args.gpus)

    .....

样例二:

样例三:


说明:此文章仅作为学习记录用,防止自己忘了,方便重用,仅此而已。

主要参考博客:Python argparse模块详解_月夜风雨磊的博客-CSDN博客_python argparse

非常的详尽:argparse - 命令行选项与参数解析(译) (xiayf.cn)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39749966/article/details/128859908

python 命令行工具 argparse使用详解-爱代码爱编程

python 命令行工具 argparse使用详解 1 基本用法2 添加一个参数3 action 参数的使用 1 基本用法 新建test.py文件,代码如下: import argparse parser = argparse.ArgumentParser() parser.parse_args() 2 添加一个参数 impo

python中命令行工具模块argparse的使用-爱代码爱编程

跑机器学习或深度学习实验的时候经常需要调各种参数,当把代码部署到服务器上时,如果直接在代码中改参数的大小,非常不方便,如果用argparse模块通过命令行传递参数到程序中,会使代码更方便简洁有序。 argparse是python用于解析命令行参数和选项的标准模块,类似于linux中的ls指令,后面可以跟着不同的参数选项以实现不同的功能,argparse就

python命令行工具_Python 命令行工具 argparse 模块使用详解-爱代码爱编程

先来介绍一把最基本的用法 importargparse parser=argparse.ArgumentParser() parser.parse_args() 在执行 parse_args() 之前,所有追加到命令行的参数都不会生效,生效了之后的默认情况类似于这样: 设置默认参数函数: importargparse parser=a

python argparse action_Python学习之Argparse 解析脚本参数详解-爱代码爱编程

标签:Argparse 是 Python 标准库中推荐的命令行解析模块,经常需要解析脚本参数的话这是个方便的工具模块,摆脱万年手动 system.argv 。本文和大家分享的就是python中Argparse解析脚本参数相关内容,一起来看看吧,希望对大家学习python有所帮助。 引入 import argparse parser = argpa

python argparse nargs_python argparse:命令行参数解析详解-爱代码爱编程

简介 本文介绍的是add_argument内建方法各个参数的使用及其效果。 本文翻译自argparse的官方说明,并加上一些笔者的理解 import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argume

Python argparse模块详解-爱代码爱编程

argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。 官方文档中讲到的,本文基本都提到了,但只是简要记录,如果需要深入理解,可查看原文。 https://docs.python.org/3/library/argparse.html 使用步骤 import argparse

如何使用 tkinter 创建待办事项应用程序-爱代码爱编程

大多数 Python 程序员或新手都厌倦了构建命令行工具或程序,并且可能不想为了体验如何使用 python 构建基于界面的应用程序而深入使用 python 进行 Web 应用程序开发。 对于任何想要使用 Python 构建

[python]调用pytdx的代码示例-爱代码爱编程

安装pytdx pip install pytdx 简单示范 from pytdx.hq import TdxHq_API api = TdxHq_API() # 数据获取接口一般返回list结构, with api.connect('119.147.212.81', 7709): # 返回普通l

使用 keras 深度学习库进行cnn 图像识别-爱代码爱编程

Keras 是一个用于深度学习的 Python 库,它封装了强大的数值库 Theano 和 TensorFlow。 在本文中,你将了解如何在 Keras 中开发和评估用于图像识别的深度学习模型。完成本文后,你将了解: 关

python国际化学习教程-爱代码爱编程

很幸运python提供了中文等其他语言的教程! 这里以13.11.1为例   Python 是一门易于学习、功能强大的编程语言。它提供了高效的高级数据结构,还能简单有效地面向对象编程。Python 优雅的语法和动态类型以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。 Python 官网(Welcome to Python.

入职一年,那个准的下班的人,比我先升职了...-爱代码爱编程

最近心态崩了。 和我同期一道进公司的人又升了一级,可是明明大家在进公司时,他不论是学历还是工作经验,样样都不如自己,眼下不过短短的两年时间便一跃在自己的职级之上,这着实让我有几分不甘心。 我想不明白,明明自己十分努力

python-爱代码爱编程

文章目录 1.引言2.引入argparse模块3.在pycharm的Terminal中键入4.输入代码5.改变输入参数顺序6.简化help菜单7. 参数是否出入完整8.互斥参数 1.引言 我先创建一

01 python 基础知识点 (数据类型)-爱代码爱编程

一、基础信息 保存文件必须加“.py”后缀。windows+r  一>  cmd  一>  调出默认系统程序运行。文件编码采用UTF-8    #  (encoding=utf-8) {ctrl+/}  将程序转换为注释,反之亦然 tab 键  整体向右缩进,shift+tab   向左缩进 ‘main’: 的作用就是控制这两种情况执行代码的

【python】基于you-爱代码爱编程

文章目录 1 前言2 you-get2.1 安装2.2 简单使用2.3 扩展 3 下载网页视频3.1 概述3.2 下载网页 4 代码 1 前言   过年了,想给家里长辈下几首戏曲,于是找

蓝桥杯2022 python c组-爱代码爱编程

蓝桥杯2022 python C组 跟之前的就四题不一样 第二题:特殊时间 就是i 从0-9,j从0-9 i是三个一样的,然后看看他们能不能成为 年 月日 时分 成为年只要大于0就好了,称为月日的话月要从1-12,日