深入解析Python的argparse命令行参数的实战案例

Written by

in

文章目录
  • argparse 是 Python 标准库中用于处理命令行参数的模块。它允许我们通过命令行传递参数和选项,并在脚本中方便地进行解析和处理。相较于 sys.argv 的手动解析,argparse 提供了更加结构化、用户友好和可维护的方式。
  • 我们从一个简单的例子开始: import argparse parser = argparse.ArgumentParser(description=”这是一个演示脚本”) parser.add_argument(“name”, help=”你的名字”) parser.add_argument(“–age”, type=int, help=”你的年龄”, default=18) args = parser.parse_args() print(f”你好, {args.name}!你今年 {args.age} 岁。”) 运行: python demo.py Alice –age 25 输出: 你好, Alice!你今年 25 岁。
  • 想实现类似 Git 命令那样的子命令结构: python tool.py train –epochs 10 python tool.py test –model model.pth 可以使用 subparsers: parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest=”command”) # 子命令 train train_parser = subparsers.add_parser(“train”) train_parser.add_argument(“–epochs”, type=int) # 子命令 test test_parser = subparsers.add_parser(“test”) test_parser.add_argument(“–model”) args = parser.parse_args() if args.command == “train”: print(f”开始训练,共 {args.epochs} 个 epoch”) elif args.command == “test”: print(f”使用模型 {args.model} 进行测试”)
  • 默认情况下,argparse 自动生成: python demo.py –help 会打印出所有参数说明和用法。 错误参数会自动提示: error: argument –age: invalid int value: ‘abc’ 你还可以自定义错误处理逻辑: try: args = parser.parse_args() except SystemExit: print(“请检查命令行参数是否正确”)
  • 一个用于图像缩放的 CLI 工具: import argparse from PIL import Image import os parser = argparse.ArgumentParser(description=”批量图像缩放工具”) parser.add_argument(“input_dir”, help=”输入文件夹路径”) parser.add_argument(“output_dir”, help=”输出文件夹路径”) parser.add_argument(“–scale”, type=float, default=0.5, help=”缩放比例”) args = parser.parse_args() if not os.path.exists(args.output_dir): os.makedirs(args.output_dir) for file in os.listdir(args.input_dir): if file.lower().endswith((“.png”, “.jpg”, “.jpeg”)): img = Image.open(os.path.join(args.input_dir, file)) new_size = (int(img.width * args.scale), int(img.height * args.scale)) resized_img = img.resize(new_size) resized_img.save(os.path.join(args.output_dir, file)) print(“处理完成!”) 使用方式: python resize.py ./input ./output –scale 0.8
  • argparse 是开发 Python 命令行工具不可或缺的标准模块,它功能全面、文档丰富、学习曲线平缓。只要掌握了它,你就可以轻松将任何 Python 脚本变成一个强大、优雅、可维护的命令行工具。
  • 参数选项 说明 type 参数类型转换(如 int) default 默认值 help 参数说明 choices 限制输入值范围 action 用于布尔值,如 store_true nargs 接收多个值,如 '+' required 是否必须(仅对可选参数有效) metavar 显示的占位符名称 如果你正在开发脚本或 CLI 工具,不妨试试 argparse,你会发现它不只是一个参数解析器,更是构建优雅命令行接口的基础工具。 到此这篇关于深入解析 Python 的 argparse命令行参数的最佳实践的文章就介绍到这了,更多相关Python argparse命令行参数内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python中argparse模块命令行参数详细解析 Python中argparse的使用小结 python程序运行添加命令行参数argparse模块具体用法详解 使用Python中的Argparse实现将列表作为命令行参数传递 Python命令行参数解析包argparse的使用详解 python 如何利用argparse解析命令行参数 Python解析命令行读取参数–argparse模块使用方法
  • 目录
    • 一、什么是 argparse?
      • ✅ argparse 的优点:
    • 二、基本用法
      • 解析代码说明:
    • 三、常用参数详解
      • 1. 类型转换
      • 2. 设置默认值
      • 3. 布尔开关参数(action)
      • 4. 选择参数(choices)
      • 5. 多值参数(nargs)
    • 四、位置参数与可选参数
      • 位置参数
      • 可选参数
    • 五、子命令支持(subparsers)
      • 六、进阶技巧与使用建议
        • 1. 添加参数分组(group)
        • 2. 使用metavar优化帮助提示
        • 3. 打印默认值ArgumentDefaultsHelpFormatter
      • 七、错误处理与帮助信息
        • 八、实战案例:批量图像处理工具
          • 九、总结
            • ✅ 推荐使用场景:
          • 🔚 附:常用参数速查表

            在日常的 Python 开发中,我们常常希望脚本能够像命令行工具一样运行,能够接受不同的参数或选项,灵活控制程序行为。Python 的标准库 argparse 就为我们提供了一个强大、灵活且易用的命令行参数解析工具。

            本文将带你系统了解 argparse 的核心功能、常用模式、进阶用法,以及开发命令行工具的最佳实践。

            argparse 是 Python 标准库中用于处理命令行参数的模块。它允许我们通过命令行传递参数和选项,并在脚本中方便地进行解析和处理。相较于 sys.argv 的手动解析,argparse 提供了更加结构化、用户友好和可维护的方式。

            • 支持位置参数和可选参数;
            • 自动生成 --help 帮助信息;
            • 类型检查和自动转换;
            • 多个子命令支持(如 git commitgit push);
            • 良好的错误提示机制。

            我们从一个简单的例子开始:

            import argparse
            parser = argparse.ArgumentParser(description="这是一个演示脚本")
            parser.add_argument("name", help="你的名字")
            parser.add_argument("--age", type=int, help="你的年龄", default=18)
            args = parser.parse_args()
            print(f"你好, {args.name}!你今年 {args.age} 岁。")

            运行:

            python demo.py Alice --age 25

            输出:

            你好, Alice!你今年 25 岁。

            • ArgumentParser():创建参数解析器。
            • add_argument():添加一个参数,第一个是参数名,-- 开头的是“可选参数”,否则为“位置参数”。
            • parse_args():从命令行获取参数并解析为对象。
            • args.name / args.age:通过属性访问解析结果。

            parser.add_argument("--count", type=int)
            

            自动将输入转换为整数,如果输入错误会报错。

            parser.add_argument("--city", default="Shanghai")
            

            如果不传 --city,默认值为 "Shanghai"

            parser.add_argument("--verbose", action="store_true")
            

            使用方式:

            python demo.py --verbose
            

            args.verbose == True,否则为 False

            parser.add_argument("--mode", choices=["train", "test", "eval"])
            

            只有传入 "train""test""eval" 才会通过验证。

            parser.add_argument("--nums", nargs='+', type=int)
            

            支持:

            python demo.py --nums 1 2 3 4
            

            结果:args.nums = [1, 2, 3, 4]

            位置参数必须按顺序输入,例如:

            parser.add_argument("filename")
            

            则必须调用时传入:

            python demo.py input.txt
            

            否则会报错。

            使用 --- 开头的是可选参数,如:

            parser.add_argument("-o", "--output")
            

            可以这样传入:

            python demo.py -o result.txt
            

            想实现类似 Git 命令那样的子命令结构:

            python tool.py train --epochs 10
            python tool.py test --model model.pth
            

            可以使用 subparsers

            parser = argparse.ArgumentParser()
            subparsers = parser.add_subparsers(dest="command")
            # 子命令 train
            train_parser = subparsers.add_parser("train")
            train_parser.add_argument("--epochs", type=int)
            # 子命令 test
            test_parser = subparsers.add_parser("test")
            test_parser.add_argument("--model")
            args = parser.parse_args()
            if args.command == "train":
                print(f"开始训练,共 {args.epochs} 个 epoch")
            elif args.command == "test":
                print(f"使用模型 {args.model} 进行测试")

            group = parser.add_argument_group("训练参数")
            group.add_argument("--batch_size", type=int)
            

            这在帮助信息中会将参数分组显示,提高可读性。

            parser.add_argument("--output", metavar="FILE", help="输出文件路径")
            

            metavar 会在 help 中显示为 --output FILE,更清晰。

            parser = argparse.ArgumentParser(
                description="示例",
                formatter_class=argparse.ArgumentDefaultsHelpFormatter
            )
            

            这样在 --help 中会显示每个参数的默认值。

            默认情况下,argparse 自动生成:

            python demo.py --help
            

            会打印出所有参数说明和用法。

            错误参数会自动提示:

            error: argument --age: invalid int value: 'abc'
            

            你还可以自定义错误处理逻辑:

            try:
                args = parser.parse_args()
            except SystemExit:
                print("请检查命令行参数是否正确")
            

            一个用于图像缩放的 CLI 工具:

            import argparse
            from PIL import Image
            import os
            parser = argparse.ArgumentParser(description="批量图像缩放工具")
            parser.add_argument("input_dir", help="输入文件夹路径")
            parser.add_argument("output_dir", help="输出文件夹路径")
            parser.add_argument("--scale", type=float, default=0.5, help="缩放比例")
            args = parser.parse_args()
            if not os.path.exists(args.output_dir):
                os.makedirs(args.output_dir)
            for file in os.listdir(args.input_dir):
                if file.lower().endswith((".png", ".jpg", ".jpeg")):
                    img = Image.open(os.path.join(args.input_dir, file))
                    new_size = (int(img.width * args.scale), int(img.height * args.scale))
                    resized_img = img.resize(new_size)
                    resized_img.save(os.path.join(args.output_dir, file))
            print("处理完成!")

            使用方式:

            python resize.py ./input ./output --scale 0.8
            

            argparse 是开发 Python 命令行工具不可或缺的标准模块,它功能全面、文档丰富、学习曲线平缓。只要掌握了它,你就可以轻松将任何 Python 脚本变成一个强大、优雅、可维护的命令行工具。

            • 数据处理脚本(如预处理、数据清洗);
            • 模型训练与测试命令行工具;
            • 自动化脚本;
            • 简易服务器或工具 CLI。

            参数选项 说明
            type 参数类型转换(如 int
            default 默认值
            help 参数说明
            choices 限制输入值范围
            action 用于布尔值,如 store_true
            nargs 接收多个值,如 '+'
            required 是否必须(仅对可选参数有效)
            metavar 显示的占位符名称

            如果你正在开发脚本或 CLI 工具,不妨试试 argparse,你会发现它不只是一个参数解析器,更是构建优雅命令行接口的基础工具。

            到此这篇关于深入解析 Python 的 argparse命令行参数的最佳实践的文章就介绍到这了,更多相关Python argparse命令行参数内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

            您可能感兴趣的文章:

            • Python中argparse模块命令行参数详细解析
            • Python中argparse的使用小结
            • python程序运行添加命令行参数argparse模块具体用法详解
            • 使用Python中的Argparse实现将列表作为命令行参数传递
            • Python命令行参数解析包argparse的使用详解
            • python 如何利用argparse解析命令行参数
            • Python解析命令行读取参数–argparse模块使用方法

            站内搜索