欢迎光临
我们一直在努力

argparse模块用法

argparse模块用法

      • 示例1
      • 常用命令行调用示例
      • 关键特点
      • 示例2
      • 特性说明:
      • 使用场景:
      • 命令行使用示例:
      • 在代码中的使用方式:
      • 相关参数对比:
      • 扩展建议:

argparse 模块主要用法如下:

功能类别方法/参数说明代码示例
基础设置 ArgumentParser() 创建解析器对象 parser = argparse.ArgumentParser(description="示例程序")
add_argument() 添加参数定义 parser.add_argument("filename")
参数类型 位置参数 必须提供的参数,按顺序解析 parser.add_argument("input_file")
可选参数 以 – 或 — 开头,顺序任意 parser.add_argument("-v", "–verbose")
参数属性 type 指定参数类型(如 int, float, str) type=int
default 设置默认值 default=1
choices 限制参数值的可选范围 choices=["A", "B", "C"]
required 是否必须提供(针对可选参数) required=True
help 参数的帮助说明 help="输入文件名"
特殊功能 action="store_true" 当参数出现时设为 True,否则为 False action="store_true"
nargs 指定参数接收的值的数量:?(0或1个), *(0或多个), +(1或多个) nargs="+"
dest 解析结果中使用的属性名 dest="output"
解析与使用 parse_args() 解析命令行参数,返回命名空间对象 args = parser.parse_args()
访问参数值 通过属性名访问参数值 print(args.filename)

示例1

import argparse

# 1. 创建解析器
parser = argparse.ArgumentParser(description="文件处理工具")

# 2. 添加参数
parser.add_argument("input", help="输入文件路径") # 位置参数
parser.add_argument("-o", "–output", help="输出文件路径", default="output.txt") # 可选参数
parser.add_argument("-n", "–number", type=int, help="重复次数", default=1, choices=[1,2,3])
parser.add_argument("-v", "–verbose", action="store_true", help="显示详细输出")

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

# 4. 使用参数
print(f"输入文件: {args.input}")
print(f"输出文件: {args.output}")
if args.verbose:
print("详细模式已开启")

常用命令行调用示例

# 基本用法
python script.py data.txt

# 使用可选参数
python script.py data.txt -o result.txt -n 2

# 启用标志参数
python script.py data.txt -v

# 查看帮助
python script.py -h

关键特点

  • 自动生成帮助信息:使用 -h 或 –help 自动生成
  • 类型验证:自动检查参数类型和取值范围
  • 灵活的参数设计:支持短格式(-v)和长格式(–verbose)
  • 子命令支持:可使用 add_subparsers() 实现类似 git 的子命令系统
  • 这是一个很好的 argparse 使用示例!让我详细解析这个参数定义:

    示例2

    parser.add_argument("–log_all",
    action="store_true",
    help="flag to log in all processes, otherwise only in rank0",
    )

    特性说明:

    特性说明
    参数名 –log_all(长格式)
    action store_true – 标志型参数
    作用 控制分布式训练中的日志记录行为
    默认行为 不指定该参数时为 False

    使用场景:

    通常在分布式训练(如使用 PyTorch DDP)中:

    • 未指定 –log_all:只在 rank0 进程记录日志(避免重复输出)
    • 指定 –log_all:所有进程都记录日志(用于调试)

    命令行使用示例:

    # 默认情况:只在 rank0 记录日志
    python train.py –data_dir ./data –epochs 10

    # 启用所有进程记录日志
    python train.py –data_dir ./data –epochs 10 –log_all

    # 等效写法
    python train.py –data_dir ./data –epochs 10 –log_all=true

    在代码中的使用方式:

    import argparse
    import torch.distributed as dist

    # 解析参数
    parser = argparse.ArgumentParser()
    parser.add_argument("–log_all", action="store_true",
    help="flag to log in all processes, otherwise only in rank0")
    args = parser.parse_args()

    # 分布式训练中根据参数控制日志
    def log_message(message):
    if args.log_all:
    # 所有进程都打印
    print(f"[Rank {dist.get_rank()}] {message}")
    else:
    # 只在 rank0 打印
    if dist.get_rank() == 0:
    print(message)

    # 使用示例
    log_message("开始训练…")

    相关参数对比:

    # 不同 action 类型的对比
    parser.add_argument("–verbose", action="store_true") # 标志,默认为 False
    parser.add_argument("–quiet", action="store_false") # 标志,默认为 True
    parser.add_argument("–level", action="store_const", const=10) # 存储固定值

    扩展建议:

    如果需要更精细的控制,可以考虑:

    # 方案1:三态选择
    parser.add_argument("–log_level",
    choices=["none", "rank0", "all"],
    default="rank0",
    help="日志记录级别:none(不记录), rank0(仅rank0), all(所有进程)")

    # 方案2:数值控制
    parser.add_argument("–log_freq",
    type=int,
    default=10,
    help="每多少步记录一次日志(仅在rank0生效,除非指定–log_all)")

    这种 store_true 类型的参数特别适合用于开关/标志功能,代码中只需检查 if args.log_all: 即可。

    赞(0)
    未经允许不得转载:171主机测评 » argparse模块用法
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址