马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
弁言
在开辟下令行工具时,怎样处理处罚用户输入的参数是一个根本而告急的标题。Python 的 argparse 模块是标准库中用于剖析下令行参数的强大工具,它可以资助你轻松创建用户友好的下令行接口。本文将带你从入门到醒目,把握 argparse 的各种用法。
一、argparse 根本入门
1.1 最简朴的示例
让我们从一个最简朴的例子开始:- import argparse<br><br># 创建解析器<br>parser = argparse.ArgumentParser(description='这是一个示例程序')<br><br># 添加位置参数<br>parser.add_argument('name', help='你的名字')<br><br># 解析参数<br>args = parser.parse_args()<br><br>print(f'你好,{args.name}!')
复制代码 运行结果:- $ python hello.py Alice<br>你好,Alice!
复制代码 1.2 焦点概念
- ArgumentParser:参数剖析器,全部参数的容器
- add_argument():添加参数的方法
- parse_args():剖析下令行输入,返回定名空间对象
二、参数范例详解
2.1 位置参数与可选参数
- import argparse<br><br>parser = argparse.ArgumentParser()<br><br># 位置参数(必须提供)<br>parser.add_argument('filename', help='要处理的文件名')<br><br># 可选参数(以 - 或 -- 开头)<br>parser.add_argument('-v', '--verbose', action='store_true', help='启用详细输出')<br>parser.add_argument('-n', '--number', type=int, default=1, help='重复次数')<br><br>args = parser.parse_args()<br>print(f'处理文件: {args.filename}')<br>print(f'详细模式: {args.verbose}')<br>print(f'重复次数: {args.number}')
复制代码 2.2 参数范例转换
argparse 支持主动范例转换:- parser.add_argument('--port', type=int, default=8080, help='端口号')<br>parser.add_argument('--rate', type=float, default=1.0, help='比率')<br>parser.add_argument('--tags', nargs='+', help='标签列表') # 接收多个值
复制代码 三、高级用法
3.1 互斥参数组
偶尔你须要让某些参数互斥(不能同时利用):- parser = argparse.ArgumentParser(description='文件处理工具')<br>group = parser.add_mutually_exclusive_group()<br>group.add_argument('--json', action='store_true', help='以JSON格式输出')<br>group.add_argument('--csv', action='store_true', help='以CSV格式输出')<br>group.add_argument('--xml', action='store_true', help='以XML格式输出')
复制代码 3.2 子下令(Sub-Commands)
像 Git 那样的子下令实现:- parser = argparse.ArgumentParser(description='项目管理工具')<br>subparsers = parser.add_subparsers(dest='command', help='可用命令')<br><br># 创建 init 子命令<br>init_parser = subparsers.add_parser('init', help='初始化项目')<br>init_parser.add_argument('--template', default='basic', help='项目模板')<br><br># 创建 build 子命令<br>build_parser = subparsers.add_parser('build', help='构建项目')<br>build_parser.add_argument('--release', action='store_true', help='发布模式')<br><br>args = parser.parse_args()<br><br>if args.command == 'init':<br> print(f'初始化项目,使用模板: {args.template}')<br>elif args.command == 'build':<br> print(f'构建项目,发布模式: {args.release}')
复制代码 3.3 自界说动作(Action)
- class CustomAction(argparse.Action):<br> def __call__(self, parser, namespace, values, option_string=None):<br> print(f'自定义处理: {values}')<br> setattr(namespace, self.dest, values.upper())<br><br>parser.add_argument('--name', action=CustomAction, help='名称(自动转为大写)')
复制代码 四、实用本事
4.1 参数验证
[code]def check_port(value):
ivalue = int(value)
if not (1 |