argparse.ArgumentParser

Python 매개변수 구문 분석 도구 argparse.ArgumentParser() 및 자세한 예제

파서 생성 parser=argparse.ArgumentParser()
매개변수 추가 parser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required] [, help][, metavar][, dest])
각 매개변수에 대한 설명:

name 또는 flags: 이름 또는 문자열 목록.
action: 인수가 명령줄에 나타날 때 사용할 작업입니다.
nargs: 읽어야 하는 명령줄 매개변수의 수 python parser parameter nargs='+'의미

  • nargs='*': 0개 이상의 매개변수를 설정할 수 있음을 나타냅니다.
  • nargs='+' : 하나 이상의 매개변수를 설정할 수 있음을 나타냅니다.
  • nargs='?' : 매개변수를 0 또는 1로 설정할 수 있음을 나타냅니다.

const : 매개변수가 지정되지 않은 경우 기본값 type : 명령 줄 매개 변수를
변환해야 하는 유형 parameter metavar - 사용법에 설명된 매개변수 이름, 필수 매개변수의 경우 기본적으로 매개변수 이름이고, 선택적 매개변수의 경우 기본적으로 모두 대문자로 된 매개변수 이름입니다. dest - 구문 분석된 매개변수 이름, 기본적 으로 선택적 매개변수에 대해 가장 긴 이름이 선택되고 가운데 대시가 있습니다. 선은 밑줄로 변환됩니다.




구문 분석 매개변수 parser.parse_args()
호출 매개변수 exp_path = paras.exppath

import argparse

def parse_args_and_config():
    parser = argparse.ArgumentParser(description=globals()["__doc__"])

    parser.add_argument(
        "--config", type=str, required=True, help="Path to the config file", default="/home"
    )
    #  -V=XXX 或 --verson=
    parser.add_argument(
        "-V", "--verson",
        type=int,
        default=3.7
    )
    parser.add_argument('--ch_mult', nargs='*', type=int,
                            help='channel multiplier')
    # 出现 -t 或 --T 为true, 否则为false  (-t=true这样写是错误的)
    parser.add_argument("-t", "--T", action="store_true")
    args = parser.parse_args()
    # arg.长  args.verson 不能args.V
    print(args.config, args.verson, args.T, args.ch_mult)

parse_args_and_config()
# 调用方式 python test.py --config="/home/" --ch_mult 2 3 4 -t
# 结果  /home/ 3.7 True [2, 3, 4]

argparse.Namespace()

구성 파일을 로드하고 구성 파일의 정보를 argparse에 저장 구성 파일의
형식은 yml 형식인 cifar10.yml이며 내부 내용은 사전 형식으로 저장됩니다.

data:
   dataset: "CIFAR10"
   image_size: 32
   num_workers: 4

model:
   type: "simple"
   in_channels: 3

   ema: True
   resamp_with_conv: True
XXXX:
   dd:"ss"

로드 구성 파일

with open("D:\\BaiduSyncdisk\\code\\deeplearn\\paper_exerpriment\\001diffusion_model\\002_DDIM\\ddim-main\\configs\\cifar10.yml") as f:
   config = yaml.safe_load(f)
   print(type(config)) # <class 'dict'>
new_config = dict2namespace(config)
print(new_config)

사전을 argparse에 저장한 후.

def dict2namespace(config):
    print(11)
    namespace = argparse.Namespace()
    for key, value in config.items():
        # print(key, value)
        if isinstance(value, dict):
            new_value = dict2namespace(value)
        else:
            new_value = value
        setattr(namespace, key, new_value)
    return namespace

Guess you like

Origin blog.csdn.net/weixin_42382758/article/details/130414458