您现在的位置是:网站首页 > 博客日记 >

Python命令行参数解析-argparse

作者:YXN-python 阅读量:7 发布日期:2025-06-04

argparse 是 Python 标准库中用于解析命令行参数的模块,它取代了早期的 optparse 模块,提供了更强大、更灵活的命令行参数处理功能。

基本用法

import argparse

# 1. 创建解析器对象
parser = argparse.ArgumentParser(description='程序描述')

# 2. 添加参数
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                    help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                    const=sum, default=max,
                    help='sum the integers (default: find the max)')

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

# 4. 使用参数
print(args.accumulate(args.integers))

主要功能

# 1. 位置参数
parser.add_argument('filename', help='input file')

# 2. 可选参数
parser.add_argument('-f', '--filename', help='input file')

# 3. 参数类型
parser.add_argument('-n', type=int, help='a number')

# 4. 参数动作 (Action)
"""
    store - 存储参数值 (默认)
    store_const - 存储常量值
    store_true/store_false - 存储布尔值
    append - 将值追加到列表
    count - 统计参数出现次数
    help - 显示帮助信息
"""
parser.add_argument('--verbose', action='store_true', help='verbose output')

# 5. 参数数量 (nargs)
"""
    ? - 0或1个参数
    * - 0或多个参数
    + - 1或多个参数
    数字 - 确切数量的参数
"""
parser.add_argument('files', nargs='+', help='list of files')

# 6. 默认值和必需参数
parser.add_argument('--output', default='output.txt', required=True)

# 7. 参数组
group = parser.add_mutually_exclusive_group()
group.add_argument('--verbose', action='store_true')
group.add_argument('--quiet', action='store_true')

 

高级用法

子命令

subparsers = parser.add_subparsers(dest='command')

# 创建子命令 'train'
parser_train = subparsers.add_parser('train', help='train a model')
parser_train.add_argument('--lr', type=float, default=0.01)

# 创建子命令 'test'
parser_test = subparsers.add_parser('test', help='test a model')
parser_test.add_argument('--batch-size', type=int, default=32)

 

自定义类型

def percentage(x):
    x = float(x)
    if not 0 <= x <= 100:
        raise argparse.ArgumentTypeError('Value must be between 0 and 100')
    return x

parser.add_argument('--discount', type=percentage)

 

自定义帮助信息

parser = argparse.ArgumentParser(
    description='程序描述',
    epilog='示例: python script.py -i input.txt -o output.txt',
    formatter_class=argparse.ArgumentDefaultsHelpFormatter
)

 

实际示例

import argparse

def main():
    parser = argparse.ArgumentParser(description='Process some integers.')
    
    parser.add_argument('integers', metavar='N', type=int, nargs='+',
                        help='an integer for the accumulator')
    parser.add_argument('--sum', dest='accumulate', action='store_const',
                        const=sum, default=max,
                        help='sum the integers (default: find the max)')
    parser.add_argument('--verbose', action='store_true',
                        help='print processing details')
    
    args = parser.parse_args()
    
    if args.verbose:
        print("Processing numbers:", args.integers)
    
    result = args.accumulate(args.integers)
    print("Result:", result)

if __name__ == '__main__':
    main()

 

YXN-python

2025-06-04