大家好,我是水滴~~
当处理命令行参数时,Python 的 argparse
模块是一个强大而灵活的工具。它提供了一个简单且一致的方式来定义命令行参数、选项和子命令,并帮助你解析和验证用户提供的输入。本教程将详细介绍 argparse
模块的使用方法和常见用例。
文章中包含大量的示例代码,希望能够帮助新手同学快速入门。
本文收录于《Python入门核心技术》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。
文章目录
- 前言
- 一、使用 argparse 模块
- 1.1 引入 argparse 模块
- 1.2 创建参数解析器
- 1.3 添加命令行参数
- 1.4 解析命令行参数
- 1.5 获取参数值
- 二、各类参数实例
- 2.1 添加位置参数
- 2.2 添加可选参数
- 2.3 添加行为参数
- 2.4 添加短参数
- 三、查看帮助信息
- 总结
前言
在开发命令行工具或需要从命令行接收用户输入的 Python 程序中,处理命令行参数是一项常见任务。为了简化这一过程,Python 提供了
argparse
模块,它能够帮助我们定义和解析命令行参数,并提供用户友好的命令行界面。本教程将详细介绍argparse
模块的使用方法和常见用例,帮助你轻松处理命令行参数,提升程序的灵活性和易用性。
一、使用 argparse 模块
1.1 引入 argparse 模块
由于
argparse
模块是 Python 标准库中自带的模块,所以不需要安装,使用导入即可。
下面代码使用 import
来导入 argparse
模块:
import argparse
1.2 创建参数解析器
在开始定义命令行参数之前,我们需要创建一个参数解析器对象。可以使用
ArgumentParser
类创建解析器。
如下代码:
parser = argparse.ArgumentParser(description='这是一个命令行参数示例')
上面代码创建了一个新的 ArgumentParser
参数解析器对象,为其名为 parser
,并传递了一个可选的 description
参数,用于描述你的程序或命令行工具的功能。
ArgumentParser
类还有很多可选的参数供我们使用,下面列出这些参数以及功能描述:
prog
- 程序的名称 (默认值:os.path.basename(sys.argv[0])
)usage
- 描述程序用途的字符串(默认值:从添加到解析器的参数生成)description
- 要在参数帮助信息之前显示的文本(默认:无文本)epilog
- 要在参数帮助信息之后显示的文本(默认:无文本)parents
- 一个ArgumentParser
对象的列表,它们的参数也应包含在内formatter_class
- 用于自定义帮助文档输出格式的类prefix_chars
- 可选参数的前缀字符集合(默认值: ‘-’)fromfile_prefix_chars
- 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值:None
)argument_default
- 参数的全局默认值(默认值:None
)conflict_handler
- 解决冲突选项的策略(通常是不必要的)add_help
- 为解析器添加一个-h/--help
选项(默认值:True
)allow_abbrev
- 如果缩写是无歧义的,则允许缩写长选项 (默认值:True
)exit_on_error
- 决定当错误发生时是否让 ArgumentParser 附带错误信息退出。 (默认值:True
)
1.3 添加命令行参数
创建好参数解析器对象后,就可以使用
add_argument()
方法来添加参数了。参数分好几种,在第二章我们详细介绍。
如下代码:
parser.add_argument('--arg1', type=str, help='参数1')
parser.add_argument('arg2', type=int, help='参数2')
上面代码中添加了两个参数:arg1
和 arg2
,并使用 type
参数指定数据类型,使用 help
参数添加该选项的功能描述。
add_argument()
方法还有很多可选的参数供我们使用,下面列出这些参数以及功能描述:
name or flags
- 一个命名或者一个选项字符串的列表,例如foo
或-f, --foo
。action
- 当参数在命令行中出现时使用的动作基本类型,例如store_true
。nargs
- 命令行参数应当消耗的数目。const
- 被一些action
和nargs
选择所需求的常数。default
- 当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值。type
- 命令行参数应当被转换成的类型。choices
- 由允许作为参数的值组成的序列。required
- 此命令行选项是否可省略 (仅选项可用)。help
- 一个此选项作用的简单描述。metavar
- 在使用方法消息中使用的参数值示例。dest
- 被添加到parse_args()
所返回对象上的属性名。
1.4 解析命令行参数
定义完命令行参数后,我们需要解析用户提供的命令行输入。使用 parse_args()
方法解析命令行参数:
args = parser.parse_args()
parse_args()
方法会解析命令行参数并返回一个 args
对象,其中包含了我们定义的参数的值。
1.5 获取参数值
通过 args
对象,我们可以获取用户提供的命令行参数的值,并在程序中进行相应的处理:
arg1_value = args.arg1
arg2_value = args.arg2
在上面的示例中,我们通过 args.arg1
和 args.arg2
来获取对应参数的值。
二、各类参数实例
在使用过程中,添加命令行参数的过程是多变的,下面我们通过一些实例来演示不同各类的参数的添加方法。
2.1 添加位置参数
位置参数是必需的参数,它们没有前缀,直接跟在命令行中的位置上。使用
add_argument()
方法添加位置参数。
创建一个 argparse_test.py
Python程序,其如下代码:
import argparse
# 1.创建参数解析器
parser = argparse.ArgumentParser(description='这是一个解析命令行参数示例')
# 2.添加位置参数(positional arguments)
parser.add_argument('arg1', type=int, help='位置参数1')
parser.add_argument('arg2', type=str, help='位置参数2')
# 3.解析命令行参数
args = parser.parse_args()
# 4.获取并打印参数值
print(args)
print(args.arg1)
print(args.arg2)
add_argument()
方法接受一些参数,其中最重要的是参数的名称、类型和帮助信息。在上面的示例中,我们定义了两个位置参数 arg1
和 arg2
,一个是整数类型,一个是字符串类型,并提供了相应的帮助信息。
使用时,在命令行中 python .\argparse_test.py 10 ABC
,其中 10 和 ABC 为位置参数。
$ python .\argparse_test.py 10 ABC
Namespace(arg1=10, arg2='ABC')
10
ABC
位置参数是必填的,否则会报错:
$ python .\argparse_test.py 10
usage: argparse_test.py [-h] arg1 arg2
argparse_test.py: error: the following arguments are required: arg2
2.2 添加可选参数
可选参数不是必需的,它们通常以双破折线
--
作为前缀。使用add_argument()
方法添加可选参数,还可以指定其默认值。
如下代码:
import argparse
# 1.创建参数解析器
parser = argparse.ArgumentParser(description='这是一个解析命令行参数示例')
# 2.添加位置参数(positional arguments)
parser.add_argument('--option1', type=str, help='可选参数1')
parser.add_argument('--option2', type=str, help='可选参数2', default='a')
parser.add_argument('--option3', type=str, help='可选参数3', default='a')
# 3.解析命令行参数
args = parser.parse_args()
# 4.获取并打印参数值
print(args)
print(args.option1)
print(args.option2)
print(args.option3)
在可选参数的定义中,我们使用了 --option1
、--option2
和 --option3
作为参数名,并提供了相应的帮助信息,还设置了它们的数据类型,--option2
和 --option3
还设置了默认值。
使用时,在命令行中输入 python .\argparse_test.py --option3=ABC
,只为 --option3
指定了值 ABC
,输出如下:
$ python .\argparse_test.py --option3=ABC
Namespace(option1=None, option2='a', option3='ABC')
None
a
ABC
可以看出,option1
没有默认值,也没有输入值,其值为 None
;option2
值为默认值 a
;option3
值为输入值 ABC
。
2.3 添加行为参数
行为参数是一种特殊的可选参数,它只有两个值
True
和False
,用于标记使用。只需要在add_argument()
方法中添加action
参数,并将值设为store_true
即可。
如下代码:
import argparse
# 1.创建参数解析器
parser = argparse.ArgumentParser(description='这是一个解析命令行参数示例')
# 2.添加行为参数(action arguments)
parser.add_argument('--action1', action='store_true', help='行为参数1')
parser.add_argument('--action2', action='store_true', help='行为参数2')
# 3.解析命令行参数
args = parser.parse_args()
# 4.获取并打印参数值
print(args)
print(args.action1)
print(args.action2)
上面代码添加了两个行为参数:--action1
和 --action2
,都为它们指定了 action
参数值为 store_true
。
使用时,在命令行中输入 python .\argparse_test.py --action1
,输入时无需指定参数的值,这里只指定了 --action1
,输出如下:
$ python .\argparse_test.py --action1
Namespace(action1=True, action2=False)
True
False
从输出结果可以看出,指定了的 --action1
值为 True
,未指定的 --action2
值为 False
。
2.4 添加短参数
还可以添加短参数,使用一个
-
指定短参数,例如'-f'
。短参数可以独立使用,但我们通常和长参数共同使用:'-f', '--foo'
。
如下代码:
import argparse
# 1.创建参数解析器
parser = argparse.ArgumentParser(description='这是一个解析命令行参数示例')
# 2.添加短参数
parser.add_argument('-f', '--foo', type=str, help='短参数')
# 3.解析命令行参数
args = parser.parse_args()
# 4.获取并打印参数值
print(args)
print(args.foo)
这里需要说明一下,如果短参数和长参数同时指定,参数名为长参数的名字。
在使用时,可以通过 -f=ABC
和 --foo=ABC
两个方式指定参数值:
$ python .\argparse_test.py -f=ABC
Namespace(foo='ABC')
ABC
$ python .\argparse_test.py --foo=ABC
Namespace(foo='ABC')
ABC
三、查看帮助信息
可以使用
-h
或--help
来查看我们添加的参数信息。
下面是完整代码:
import argparse
# 1.创建参数解析器
parser = argparse.ArgumentParser(description='这是一个解析命令行参数示例')
# 2.添加位置参数(positional arguments)
parser.add_argument('arg1', type=int, help='位置参数1')
parser.add_argument('arg2', type=str, help='位置参数2')
# 2.添加可选参数(options arguments)
parser.add_argument('--option1', type=str, help='可选参数1')
parser.add_argument('--option2', type=str, help='可选参数2', default='a')
parser.add_argument('--option3', type=str, help='可选参数3', default='a')
# 2.添加行为参数(action arguments)
parser.add_argument('--action1', action='store_true', help='行为参数1')
parser.add_argument('--action2', action='store_true', help='行为参数2')
# 2.添加短参数
parser.add_argument('-f', '--foo', type=str, help='短参数')
# 3.解析命令行参数
args = parser.parse_args()
# 4.获取并打印参数值
print(args)
查看帮助信息:
$ python .\argparse_test.py --help
usage: argparse_test.py [-h] [--option1 OPTION1] [--option2 OPTION2] [--option3 OPTION3] [--action1] [--action2] [-f FOO] arg1 arg2
这是一个解析命令行参数示例
positional arguments:
arg1 位置参数1
arg2 位置参数2
options:
-h, --help show this help message and exit
--option1 OPTION1 可选参数1
--option2 OPTION2 可选参数2
--option3 OPTION3 可选参数3
--action1 行为参数1
--action2 行为参数2
-f FOO, --foo FOO 短参数
可以看出,帮助信息将我们添加的参数信息都输出了。
总结
argparse
模块是 Python 的一个标准库模块,用于处理命令行参数。通过 argparse
,我们可以定义位置参数和可选参数,并指定它们的类型、帮助信息以及其他选项。模块还提供了命令行帮助信息的自动生成功能,能够帮助用户理解和正确使用程序。在本教程中,我们学习了如何使用 argparse
模块的基本功能,包括创建参数解析器、添加位置参数和可选参数、解析命令行参数以及获取参数值。我们还演示了一个完整的示例,并给出了一些常见的命令行命令和输出。通过掌握 argparse
模块,你可以更有效地处理命令行参数,提升程序的交互性和易用性,为用户提供更好的体验。祝你在开发命令行工具或处理命令行参数时取得成功!