argparse
是 Python 标准库中用于命令行解析的模块。它用于创建命令行接口,定义命令行参数,并解析它们。下面是 argparse
的详细介绍,包括 ArgumentParser
类及其各个参数、常用方法和用例。
1. ArgumentParser
类简介
ArgumentParser
是 argparse
模块中最重要的类,它用于处理命令行参数和选项。通过 ArgumentParser
,你可以定义你的命令行工具接受的参数类型、帮助信息、默认值等。
常用构造方法参数:
prog
:程序名称,默认使用脚本名(sys.argv[0]
)。usage
:命令行工具的使用方式。可以手动设置。description
:描述信息,用于提供该命令行工具的简短说明,通常在帮助信息的开头。epilog
:尾部信息,会在帮助信息的底部显示,通常用于补充说明或版权信息。prefix_chars
:指定命令行选项的前缀字符,默认是-
(如--
或-
)。formatter_class
:用于定制化帮助信息的格式化器,通常使用argparse.HelpFormatter
。argument_default
:设置所有参数的默认值。
示例:
import argparse
parser = argparse.ArgumentParser(
prog="MyTool",
usage="%(prog)s [options] <input>",
description="This is a sample command-line tool"
)
2. add_argument
方法
add_argument
用来定义命令行参数,每个参数可以有不同的选项,例如类型、默认值、帮助信息等。
常用参数:
- name or flags:参数的名称或标志,支持位置参数(例如
<input>
)或选项参数(例如--env
)。 - action:指定当该参数出现时的行为,常见的值有:
'store'
:默认行为,存储传入的值。'store_true'
:如果该选项出现,则设置值为True
,否则为False
。'store_false'
:如果该选项出现,则设置值为False
,否则为True
。'append'
:将每个传入的值添加到一个列表中。'count'
:每次出现该选项时,计数加1。
- type:指定参数值的类型(例如
int
、str
)。 - default:指定参数的默认值,如果未提供该参数。
- help:为参数提供帮助信息,在
--help
时显示。 - required:指定该参数是否为必填项。
示例:
parser.add_argument('--env', type=str, help="指定环境类型 (dev/prd)", required=True)
parser.add_argument('--verbose', action='store_true', help="启用详细输出")
parser.add_argument('input', type=str, help="输入文件")
parser.add_argument('--retry', type=int, default=3, help="重试次数,默认值为 3")
3. parse_args
方法
parse_args()
用于解析命令行参数。它返回一个包含命令行参数及其值的命名空间对象。
args = parser.parse_args()
访问解析结果:
命令行参数会以属性的形式存储在返回的 args
对象中。例如,args.env
、args.input
、args.verbose
等。
4. 完整的命令行工具例子
import argparse
def main():
# 创建ArgumentParser对象
parser = argparse.ArgumentParser(
prog='MyTool',
description="一个命令行工具示例"
)
# 定义命令行参数
parser.add_argument('input', type=str, help="输入文件")
parser.add_argument('--env', type=str, choices=['dev', 'prd'], help="指定环境 dev 或 prd", default='dev')
parser.add_argument('--retry', type=int, default=3, help="重试次数,默认值为 3")
parser.add_argument('--verbose', action='store_true', help="启用详细输出")
# 解析命令行参数
args = parser.parse_args()
# 使用解析到的参数
print(f"输入文件: {args.input}")
print(f"环境: {args.env}")
print(f"重试次数: {args.retry}")
if args.verbose:
print("启用详细输出")
if __name__ == '__main__':
main()
启动方式:
python my_tool.py input.txt --env prd --retry 5 --verbose
输出:
输入文件: input.txt
环境: prd
重试次数: 5
启用详细输出
5. 参数类型与验证
argparse
支持多种类型的参数验证,可以通过 type
参数来指定参数类型(如 int
、float
、str
)。你还可以创建自定义的类型验证函数。
示例:自定义验证
def positive_integer(value):
ivalue = int(value)
if ivalue <= 0:
raise argparse.ArgumentTypeError("%s is not a valid positive integer" % value)
return ivalue
parser = argparse.ArgumentParser()
parser.add_argument('--num', type=positive_integer, help="请输入一个正整数")
args = parser.parse_args()
print(f"输入的正整数: {args.num}")
错误示例:
python my_tool.py --num -1
输出:
error: argument --num: -1 is not a valid positive integer
6. 子命令(Subcommands)
argparse
支持定义子命令(subcommands)。这类似于 Git 或其他命令行工具中的子命令结构,例如 git commit
、git push
。
示例:子命令
import argparse
def create(args):
print(f"创建操作,数据来源: {args.source}")
def update(args):
print(f"更新操作,数据ID: {args.data_id}")
parser = argparse.ArgumentParser(prog="my_tool")
subparsers = parser.add_subparsers()
# 子命令 create
create_parser = subparsers.add_parser('create', help='执行创建操作')
create_parser.add_argument('--source', required=True, help='数据来源')
create_parser.set_defaults(func=create)
# 子命令 update
update_parser = subparsers.add_parser('update', help='执行更新操作')
update_parser.add_argument('--data_id', required=True, help='数据ID')
update_parser.set_defaults(func=update)
# 解析命令行参数并调用对应的函数
args = parser.parse_args()
args.func(args)
启动方式:
python my_tool.py create --source "file.csv"
输出:
创建操作,数据来源: file.csv
python my_tool.py update --data_id 123
输出:
更新操作,数据ID: 123
7. 常用方法汇总
ArgumentParser.parse_args()
:解析命令行参数。ArgumentParser.print_help()
:打印帮助信息。ArgumentParser.print_usage()
:打印命令行用法。ArgumentParser.add_argument()
:定义命令行参数。ArgumentParser.set_defaults()
:设置默认值。
8. 帮助信息自定义
argparse
提供了自定义帮助信息的功能,可以通过 formatter_class
来实现:
argparse.HelpFormatter
:标准的帮助信息格式化器。argparse.RawTextHelpFormatter
:支持原始文本格式。argparse.RawDescriptionHelpFormatter
:支持原始描述文本格式。
示例:
parser = argparse.ArgumentParser(
description="这是一个示例",
formatter_class=argparse.RawTextHelpFormatter
)
小结
argparse
是 Python 的标准库,用于创建命令行工具。ArgumentParser
类用于定义命令行工具的参数、选项和帮助信息。add_argument()
用于定义具体的命令行参数。parse_args()
用于解析命令行参数并返回解析后的对象。- 支持自定义验证、子命令等高级功能。