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

掌握Python命令行利器(argparse模块从入门到精通)

在日常的 Python命令行参数解析 工作中,我们经常需要编写可以接收用户输入参数的脚本。比如备份脚本需要指定源目录和目标目录,数据处理脚本需要指定输入文件路径等。这时候,argparse 模块就派上用场了!它是 Python 标准库中用于解析命令行参数和选项的强大工具。

掌握Python命令行利器(argparse模块从入门到精通) argparse模块 Python命令行参数解析 命令行工具开发 Python argparse教程 第1张

一、为什么使用 argparse?

argparse 出现之前,开发者通常使用 sys.argv 手动解析命令行参数,这种方式不仅繁琐,而且容易出错。而 argparse 提供了:

  • 自动生成帮助信息(-h--help
  • 自动处理参数类型转换
  • 支持位置参数和可选参数
  • 错误提示友好

二、基础用法:三步走

使用 argparse 只需三个基本步骤:

  1. 创建 ArgumentParser 对象
  2. 调用 add_argument() 方法添加参数
  3. 调用 parse_args() 解析参数

示例1:最简单的命令行程序

import argparse# 第一步:创建解析器parser = argparse.ArgumentParser(description='一个简单的问候程序')# 第二步:添加参数parser.add_argument('name', help='请输入你的名字')# 第三步:解析参数args = parser.parse_args()# 使用参数print(f'你好,{args.name}!')

保存为 hello.py,然后在终端运行:

python hello.py 张三

输出:你好,张三!

三、参数类型详解

1. 位置参数 vs 可选参数

- 位置参数:必须按顺序提供,如上面的 name
- 可选参数:以 --- 开头,可省略。

import argparseparser = argparse.ArgumentParser()parser.add_argument('--age', type=int, help='年龄')  # 可选参数parser.add_argument('name')  # 位置参数args = parser.parse_args()print(f'{args.name} 今年 {args.age} 岁。')

运行:python script.py 李四 --age 25

2. 参数类型(type)

默认参数是字符串类型。你可以通过 type 指定其他类型:

parser.add_argument('--count', type=int, default=1)parser.add_argument('--rate', type=float)

3. 默认值(default)与必需参数(required)

parser.add_argument('--output', default='result.txt')  # 有默认值,非必需parser.add_argument('--config', required=True)       # 必须提供

四、高级功能

1. 互斥参数组(Mutually Exclusive Group)

有时你希望用户只能选择 A 或 B,不能同时选。这时用互斥组:

group = parser.add_mutually_exclusive_group()group.add_argument('--verbose', action='store_true')group.add_argument('--quiet', action='store_true')

2. 子命令(Subcommands)

git commitgit push 这样的多命令工具,可以用 add_subparsers() 实现:

parser = argparse.ArgumentParser()subparsers = parser.add_subparsers(dest='command')# 添加子命令 'start'start_parser = subparsers.add_parser('start')start_parser.add_argument('--port', type=int, default=8000)# 添加子命令 'stop'stop_parser = subparsers.add_parser('stop')args = parser.parse_args()if args.command == 'start':    print(f'启动服务,端口:{args.port}')elif args.command == 'stop':    print('停止服务')

五、实战:构建一个文件处理工具

下面是一个结合多种功能的完整例子,展示如何用 argparse 构建实用的 命令行工具开发 脚本:

import argparseimport osdef main():    parser = argparse.ArgumentParser(description='文件处理工具')    parser.add_argument('input_file', help='输入文件路径')    parser.add_argument('-o', '--output', default='output.txt', help='输出文件路径')    parser.add_argument('--uppercase', action='store_true', help='将内容转为大写')    parser.add_argument('--lines', type=int, help='只处理前N行')        args = parser.parse_args()        if not os.path.exists(args.input_file):        parser.error(f"输入文件不存在: {args.input_file}")        with open(args.input_file, 'r', encoding='utf-8') as f:        lines = f.readlines()        if args.lines:        lines = lines[:args.lines]        content = ''.join(lines)    if args.uppercase:        content = content.upper()        with open(args.output, 'w', encoding='utf-8') as f:        f.write(content)        print(f'处理完成!结果已保存至 {args.output}')if __name__ == '__main__':    main()

这个脚本展示了 Python argparse教程 中的核心知识点:位置参数、可选参数、布尔开关、类型转换和错误处理。

六、总结

argparse 是 Python 中构建专业级命令行应用的首选工具。通过本文的学习,你应该已经掌握了从基础到进阶的用法。记住:良好的命令行接口不仅能提升用户体验,还能让你的脚本更易于集成到自动化流程中。

现在,去尝试用 argparse 改造你手上的脚本吧!你会发现,原来命令行工具开发如此简单又强大。