当前位置: 首页 > news >正文

argparse

argparse.add_argument 完全指南

🧱 基础篇:命令行参数解析入门

1. 模块初始化

import argparse# 创建参数解析器(所有操作的基础容器)
parser = argparse.ArgumentParser(
prog='MyApp', # 程序名称(默认从sys.argv[0]获取)
description='数据处理器',
epilog='示例: python app.py input.txt --mode fast'
)

2. 参数类型解析

位置参数(Positional Arguments)
# 必须按顺序提供的参数(无前缀)
parser.add_argument(
'input_file', # 参数名称
type=str, # 自动类型转换
help='输入文件路径'
)

▶ 调用方式:

python app.py data.csv # data.csv 赋值给 args.input_file
可选参数(Optional Arguments)

# 通过 - 或 -- 标识的参数(顺序无关)
parser.add_argument(
'-m', '--mode', # 短参数 + 长参数
choices=['fast', 'slow'],
default='fast',
help='运行模式(默认: fast)'
)

▶ 调用方式:

python app.py data.csv --mode slow

🔧 核心参数详解

参数作用描述高级特性说明
dest结果字典中的属性名默认自动生成(如 --mode → mode)
type类型强制转换支持自定义函数(见进阶篇)
nargs参数值的数量规则?*+数字
const与action配合使用的常量值常用于标志型参数
metavar帮助文档中显示的参数值占位符默认用大写参数名(如 MODE)

代码示例:复杂参数定义

parser.add_argument(
'--range',
type=float,
nargs=2, # 必须提供两个值
metavar=('MIN', 'MAX'),
help='取值范围(示例: --range 0.5 2.0)'
)

▶ 调用结果:

args.range[0.5, 2.0]

🚀 进阶篇:高级应用场景

场景1:动态参数处理

自定义类型验证
def valid_percentage(value):v = float(value)if not (0 <= v <= 1):raise argparse.ArgumentTypeError('必须在0-1之间')return vparser.add_argument(
'--threshold',
type=valid_percentage, # 使用自定义验证函数
default=0.5
)
自定义 Action 类
class UpperCaseAction(argparse.Action):def call(self, parser, namespace, values, option_string=None):setattr(namespace, self.dest, values.upper())parser.add_argument(
'--text',
action=UpperCaseAction, # 自动转为大写
type=str
)

场景2:复合参数结构

子命令系统(类似git)
subparsers = parser.add_subparsers(title='commands', dest='command')# 创建子解析器
parser_train = subparsers.add_parser('train', help='训练模式')
parser_train.add_argument('--epochs', type=int)parser_test = subparsers.add_parser('test', help='测试模式')
parser_test.add_argument('--batch-size')

▶ 调用方式:

python app.py train --epochs 50
python app.py test --batch-size 32

场景3: 处理路径参数

# 使用Path对象(Python 3.6+)
from pathlib import Path
parser.add_argument('--dir', type=Path)

⚠️ 避坑指南

# 错误:短参数重复定义
parser.add_argument('-v', ...)
parser.add_argument('-v', ...)  # 触发ArgumentError  
# 布尔参数的正确姿势
parser.add_argument("--verbose", action="store_true", help="显示详细信息")
# 推荐写法(互斥组)
group = parser.add_mutually_exclusive_group()
group.add_argument('--enable', action='store_true')
group.add_argument('--disable', action='store_false', dest='enable')

转义字符:

  • 若参数值包含 *、# 等符号,需在代码中用 \ 转义。
  • 示例:parser.add_argument(“–filter”, help=“过滤模式(如 *.txt)”)。

参数顺序:

  • 使用 nargs=argparse.REMAINDER 时,必须将其作为最后一个参数定义,否则后续参数无法解析。

💡 最佳实践:使用 argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) 可在帮助信息中显示默认值

相关文章:

  • LeetCode 第54~55题
  • CentOS 操作系统下搭建 tsung性能测试环境
  • TCP实现多线程远程命令执行
  • TCP粘包:数据为何‘难舍难分’?拆解底层原理与实战解决方案
  • 解释`new`关键字的执行过程,并手动实现一个`myNew`函数。
  • Vue快速入门
  • pandas中curr函数报错ValueError: could not convert string to float: ‘RL‘解决办法
  • 《Operating System Concepts》阅读笔记:p700-p732
  • Vue3+TS快速学习
  • 【Python使用】嘿马python运维开发全体系教程第4篇:四、Linux基本命令(上)【附代码文档】
  • 鸿蒙应用(医院诊疗系统)开发篇2·Axios网络请求封装全流程解析
  • Python单例设计模式深度解析
  • 统计分析相关基础概念解释
  • 预警,曾TRO冻结超500店,高地牛再维权
  • 信息化项目交付为什么越来越难?
  • [随笔杂谈] 计算机编程 —— 环境变量究竟是个什么东西?我该如何配置它?
  • 日本Shopify 3月数据:家居品类销售额激增120%!
  • 用Allan Deviation的方式估计长时间频率偏差
  • 数据结构和算法(六)--栈队列堆
  • LeetCode算法题(Go语言实现)_49
  • 濮阳做网站的公司/深圳网站优化网站
  • 怎样淘宝做seo网站推广/软件定制开发
  • 中文网站建设模板下载/建立网站的主要步骤
  • 龙游网站制作/抖音seo怎么做的
  • 网站html静态化/一起来看在线观看免费
  • 做旅游网站教程/semseo