argparse(Python命令行解析的标准模块)

argparse(Python命令行解析的标准模块)
最新回答
銱儿鎯筜

2022-10-19 03:48:12

argparse 是 Python 内置的命令行参数解析模块,用于从命令行接收参数并转换为程序可用的变量。以下是对代码的详细解析及扩展说明:

代码解析import argparse# 1. 创建解析器对象parser = argparse.ArgumentParser(description="Demo of argparse")# 2. 添加参数parser.add_argument("--n_workers", type=int, default=-1) # 可选参数,默认值-1parser.add_argument("--gpu", dest="gpu", action="store_true") # 标志参数,出现时为Trueparser.add_argument("--input", type=int, default=66) # 可选参数,默认值66# 3. 解析命令行输入args = parser.parse_args()# 4. 使用参数print("n_workers:", args.n_workers)print("gpu:", args.gpu)print("input:", args.input)关键点说明
  1. ArgumentParser 对象

    description:帮助文档的描述信息(通过 -h 或 --help 查看)。

  2. add_argument() 方法

    --n_workers

    类型为 int,默认值 -1。若命令行未指定,则使用默认值。

    --gpu

    action="store_true":表示该参数是标志(flag),出现时值为 True,否则为 False。

    dest="gpu":指定参数在 args 中的属性名(可省略,默认用 --gpu 去横线后命名)。

    --input

    类型为 int,默认值 66。若命令行指定(如 --input 88),则覆盖默认值。

  3. parse_args()

    解析命令行输入,返回命名空间对象 args,通过 args.参数名 访问值。

运行结果分析
  1. 无额外参数时

    python argparse_study.py

    输出:n_workers: -1 # 默认值gpu: False # 未指定 --gpuinput: 66 # 默认值

  2. 指定 --gpu 时

    python argparse_study.py --gpu

    输出:gpu: True # 标志参数生效

  3. 指定 --input 时

    python argparse_study.py --input 88

    输出:input: 88 # 覆盖默认值

扩展功能
  1. 必选参数去掉参数前的 -- 并设置 required=True:

    parser.add_argument("input_file", type=str, help="必选的位置参数")

    调用时需直接提供值:

    python script.py data.txt
  2. 参数选择使用 choices 限制参数取值范围:

    parser.add_argument("--mode", choices=["train", "test"], default="train")
  3. 多值参数通过 nargs 接收多个值:

    parser.add_argument("--ids", type=int, nargs="+", help="接收一个或多个整数")

    调用示例:

    python script.py --ids 1 2 3
  4. 帮助信息运行 -h 查看自动生成的帮助文档:

    python argparse_study.py -h

    输出示例:

    usage: argparse_study.py [-h] [--n_workers N_WORKERS] [--gpu] [--input INPUT]Demo of argparseoptional arguments: -h, --help show this help message and exit --n_workers N_WORKERS --gpu --input INPUT
常见问题
  1. 参数未生效?

    检查参数名是否匹配(如 --gpu 不能写成 -gpu)。

    确保 parse_args() 在添加所有参数后调用。

  2. 类型转换错误?

    若输入值无法转换为指定类型(如 --input abc),会抛出 argparse.ArgumentTypeError。

  3. 默认值覆盖问题

    默认值仅在命令行未指定时生效,显式指定会覆盖默认值。

总结
  • argparse 适合需要灵活配置的脚本,尤其在服务器无图形界面时通过命令行传参。
  • 通过 add_argument() 定义参数规则,parse_args() 解析输入,最后通过 args 对象访问值。
  • 支持标志参数、默认值、类型转换、帮助文档等高级功能。

掌握这些用法后,可以高效地编写兼容命令行交互的 Python 程序。