【python 内置模块】argparse

2024-01-20 00:00:00

目录:

argparse 模块介绍

argparse 是 Python 3 标准库中用于解析命令行参数的强大模块,开发者可以轻松定义程序需要的参数类型、默认值和帮助信息,系统会自动从 sys.argv 中解析这些参数,并生成清晰的帮助文档。

当用户给程序传入无效参数时,argparse 会自动报出详细的错误信息。

支持位置参数和选项参数两种类型:位置参数根据出现的位置确定,而选项参数则以 “-“ 或 “–” 为前缀。

基本使用步骤

  1. 导入模块

内置库,无需安装,直接导入。

import argparse
  1. 创建解析器对象

使用 ArgumentParser() 创建一个解析器对象,可以添加描述信息说明程序用途。

parser = argparse.ArgumentParser(description='程序描述信息')
  1. 添加参数

通过 add_argument() 方法定义程序接受的参数,包括位置参数和可选参数。

parser.add_argument('filename', type=str, help='要处理的文件名')
parser.add_argument('-v', '--verbose', action='store_true', help='增加输出详细程度')
  1. 解析参数

使用 parse_args() 方法解析命令行参数,返回一个包含所有参数的命名空间对象。

args = parser.parse_args()

ArgumentParser 对象

创建 ArgumentParser 对象时,可以通过多个参数自定义其行为:

  • prog:程序名称,默认使用 sys.argv;
  • usage:自定义用法字符串,覆盖自动生成的用法信息;
  • description:在帮助信息开头显示的描述文本;
  • epilog:在帮助信息末尾显示的文本;
  • formatter_class:自定义帮助信息的格式类;
  • add_help:是否自动添加 -h/–help 选项(默认为 True);

位置参数和可选参数

位置参数是用户必须提供的参数,定义时需要指定参数名称:

parser.add_argument('input_file', type=str, help='输入文件路径')

可选参数可以根据需要选择是否提供,定义时可以指定短参数名(单破折号)和长参数名(双破折号):

parser.add_argument('-l', '--log', type=str, help='日志文件路径')

参数属性配置

add_argument() 方法支持丰富的参数配置选项:

  1. type

指定参数的数据类型,如 int、float、str 等。argparse 会自动将输入值转换为指定类型。

parser.add_argument('retry', type=int, help='输入重试次数')

支持直接处理文件参数,通过 argparse.FileType 类型可以自动验证文件是否存在且可读:

parser.add_argument('file', type=argparse.FileType('r'), help='输入文件')
  1. default

设置参数的默认值,当用户未提供该参数时使用。

parser.add_argument('--timeout', type=int, default=30, help='超时时间(秒)')
  1. required

对于可选参数,可以设置为 True 使其成为必需参数。

parser.add_argument('--num', type=int, required=True, help='必须输入一个数字')
  1. choices

限制参数值只能从指定列表中选择。

parser.add_argument('--size', choices=['S', 'M', 'L'], help='尺寸选择')
  1. nargs

控制参数接收的值的数量:

  • ‘*’:0个或多个值;
  • ‘+’:1个或多个值;
  • ‘?’:0个或1个值;
  • 整数:指定确切数量;
  1. action

定义参数被解析时的行为:

  • ‘store’:默认行为,存储参数值;
  • ‘store_true’/‘store_false’:存储布尔值;
  • ‘append’:将值追加到列表;
  • ‘count’:统计参数出现的次数;
  1. help

描述参数的用途。

完整示例

# test.py
import argparse

def main():
    # 创建解析器
    parser = argparse.ArgumentParser(
        description='示例程序:演示argparse的各种功能',
        epilog='更多信息请参考官方文档'
    )
    
    # 添加位置参数(必选)
    parser.add_argument('input_file', type=str, help='输入文件路径')
    
    # 添加可选参数
    parser.add_argument('-o', '--output', type=str, default='output.txt',
                       help='输出文件路径(默认:output.txt)')
    parser.add_argument('-v', '--verbose', action='store_true',
                       help='启用详细输出模式')
    parser.add_argument('--count', type=int, default=1,
                       help='处理次数(默认:1)')
    parser.add_argument('--mode', choices=['fast', 'normal', 'slow'],
                       default='normal', help='处理模式选择')
    
    # 解析参数
    args = parser.parse_args()
    
    # 使用参数
    print(f'输入文件: {args.input_file}')
    print(f'输出文件: {args.output}')
    print(f'处理次数: {args.count}')
    print(f'处理模式: {args.mode}')
    
    if args.verbose:
        print('详细模式已启用')

if __name__ == '__main__':
    main()
$ python3 test.py input.txt -o result.txt --count 5 --mode fast -v

使用 --help 参数查看帮助信息:

$ python3 test.py --help
usage: test.py [-h] [-o OUTPUT] [-v] [--count COUNT] [--mode {fast,normal,slow}] input_file

示例程序:演示argparse的各种功能

positional arguments:
  input_file            输入文件路径

options:
  -h, --help            show this help message and exit
  -o OUTPUT, --output OUTPUT
                        输出文件路径(默认:output.txt)
  -v, --verbose         启用详细输出模式
  --count COUNT         处理次数(默认:1)
  --mode {fast,normal,slow}
                        处理模式选择

更多信息请参考官方文档

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: