Python学习——argparse的使用

argparse 是 Python 标准库中用于命令行解析的模块。它用于创建命令行接口,定义命令行参数,并解析它们。下面是 argparse 的详细介绍,包括 ArgumentParser 类及其各个参数、常用方法和用例。

1. ArgumentParser 类简介

ArgumentParserargparse 模块中最重要的类,它用于处理命令行参数和选项。通过 ArgumentParser,你可以定义你的命令行工具接受的参数类型、帮助信息、默认值等。

常用构造方法参数:
  • prog:程序名称,默认使用脚本名(sys.argv[0])。
  • usage:命令行工具的使用方式。可以手动设置。
  • description:描述信息,用于提供该命令行工具的简短说明,通常在帮助信息的开头。
  • epilog:尾部信息,会在帮助信息的底部显示,通常用于补充说明或版权信息。
  • prefix_chars:指定命令行选项的前缀字符,默认是 -(如 ---)。
  • formatter_class:用于定制化帮助信息的格式化器,通常使用 argparse.HelpFormatter
  • argument_default:设置所有参数的默认值。

示例:

import argparse

parser = argparse.ArgumentParser(
    prog="MyTool", 
    usage="%(prog)s [options] <input>", 
    description="This is a sample command-line tool"
)

2. add_argument 方法

add_argument 用来定义命令行参数,每个参数可以有不同的选项,例如类型、默认值、帮助信息等。

常用参数:
  • name or flags:参数的名称或标志,支持位置参数(例如 <input>)或选项参数(例如 --env)。
  • action:指定当该参数出现时的行为,常见的值有:
    • 'store':默认行为,存储传入的值。
    • 'store_true':如果该选项出现,则设置值为 True,否则为 False
    • 'store_false':如果该选项出现,则设置值为 False,否则为 True
    • 'append':将每个传入的值添加到一个列表中。
    • 'count':每次出现该选项时,计数加1。
  • type:指定参数值的类型(例如 intstr)。
  • default:指定参数的默认值,如果未提供该参数。
  • help:为参数提供帮助信息,在 --help 时显示。
  • required:指定该参数是否为必填项。
示例:
parser.add_argument('--env', type=str, help="指定环境类型 (dev/prd)", required=True)
parser.add_argument('--verbose', action='store_true', help="启用详细输出")
parser.add_argument('input', type=str, help="输入文件")
parser.add_argument('--retry', type=int, default=3, help="重试次数,默认值为 3")

3. parse_args 方法

parse_args() 用于解析命令行参数。它返回一个包含命令行参数及其值的命名空间对象。

args = parser.parse_args()
访问解析结果:

命令行参数会以属性的形式存储在返回的 args 对象中。例如,args.envargs.inputargs.verbose 等。

4. 完整的命令行工具例子

import argparse

def main():
    # 创建ArgumentParser对象
    parser = argparse.ArgumentParser(
        prog='MyTool', 
        description="一个命令行工具示例"
    )

    # 定义命令行参数
    parser.add_argument('input', type=str, help="输入文件")
    parser.add_argument('--env', type=str, choices=['dev', 'prd'], help="指定环境 dev 或 prd", default='dev')
    parser.add_argument('--retry', type=int, default=3, help="重试次数,默认值为 3")
    parser.add_argument('--verbose', action='store_true', help="启用详细输出")
    
    # 解析命令行参数
    args = parser.parse_args()

    # 使用解析到的参数
    print(f"输入文件: {args.input}")
    print(f"环境: {args.env}")
    print(f"重试次数: {args.retry}")
    if args.verbose:
        print("启用详细输出")

if __name__ == '__main__':
    main()
启动方式:
python my_tool.py input.txt --env prd --retry 5 --verbose
输出:
输入文件: input.txt
环境: prd
重试次数: 5
启用详细输出

5. 参数类型与验证

argparse 支持多种类型的参数验证,可以通过 type 参数来指定参数类型(如 intfloatstr)。你还可以创建自定义的类型验证函数。

示例:自定义验证
def positive_integer(value):
    ivalue = int(value)
    if ivalue <= 0:
        raise argparse.ArgumentTypeError("%s is not a valid positive integer" % value)
    return ivalue

parser = argparse.ArgumentParser()
parser.add_argument('--num', type=positive_integer, help="请输入一个正整数")
args = parser.parse_args()
print(f"输入的正整数: {args.num}")
错误示例:
python my_tool.py --num -1

输出:

error: argument --num: -1 is not a valid positive integer

6. 子命令(Subcommands)

argparse 支持定义子命令(subcommands)。这类似于 Git 或其他命令行工具中的子命令结构,例如 git commitgit push

示例:子命令
import argparse

def create(args):
    print(f"创建操作,数据来源: {args.source}")

def update(args):
    print(f"更新操作,数据ID: {args.data_id}")

parser = argparse.ArgumentParser(prog="my_tool")
subparsers = parser.add_subparsers()

# 子命令 create
create_parser = subparsers.add_parser('create', help='执行创建操作')
create_parser.add_argument('--source', required=True, help='数据来源')
create_parser.set_defaults(func=create)

# 子命令 update
update_parser = subparsers.add_parser('update', help='执行更新操作')
update_parser.add_argument('--data_id', required=True, help='数据ID')
update_parser.set_defaults(func=update)

# 解析命令行参数并调用对应的函数
args = parser.parse_args()
args.func(args)
启动方式:
python my_tool.py create --source "file.csv"

输出:

创建操作,数据来源: file.csv
python my_tool.py update --data_id 123

输出:

更新操作,数据ID: 123

7. 常用方法汇总

  • ArgumentParser.parse_args():解析命令行参数。
  • ArgumentParser.print_help():打印帮助信息。
  • ArgumentParser.print_usage():打印命令行用法。
  • ArgumentParser.add_argument():定义命令行参数。
  • ArgumentParser.set_defaults():设置默认值。

8. 帮助信息自定义

argparse 提供了自定义帮助信息的功能,可以通过 formatter_class 来实现:

  • argparse.HelpFormatter:标准的帮助信息格式化器。
  • argparse.RawTextHelpFormatter:支持原始文本格式。
  • argparse.RawDescriptionHelpFormatter:支持原始描述文本格式。
示例:
parser = argparse.ArgumentParser(
    description="这是一个示例",
    formatter_class=argparse.RawTextHelpFormatter
)

小结

  • argparse 是 Python 的标准库,用于创建命令行工具。
  • ArgumentParser 类用于定义命令行工具的参数、选项和帮助信息。
  • add_argument() 用于定义具体的命令行参数。
  • parse_args() 用于解析命令行参数并返回解析后的对象。
  • 支持自定义验证、子命令等高级功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值