文章目录
- argparse模块介绍
- 基本用法
- add_argument()
argparse模块介绍
argparse
模块是 Python 标准库中的一个用于编写用户友好的命令行接口(CLI)的模块。它允许程序定义它所需要的命令行参数,然后 argparse
会自动从 sys.argv
解析出那些参数。argparse
自动生成帮助和使用手册,并在用户给程序传入无效参数时报错。
使用 argparse
可以让你的程序更加灵活和易于使用,因为它允许用户通过命令行参数来定制程序的行为,而不是硬编码在程序中。这对于需要处理不同输入数据或配置选项的脚本尤其有用。
基本用法
下面是如何创建一个基本的命令行接口的示例:
- 导入模块:首先,需要导入
argparse
模块。
import argparse
- 创建解析器:使用
ArgumentParser
类创建一个新的解析器对象。你可以指定程序的描述,这将在帮助信息中显示。
parser = argparse.ArgumentParser(description='这是一个命令行工具的示例。')
- 添加参数:使用
add_argument()
方法定义程序接受的命令行参数。这个方法接受多个参数来指定如何解析命令行参数,下文将详细介绍。
# 添加一个位置参数
parser.add_argument('input', help='输入文件的路径')# 添加一个可选参数,带有一个短名称和一个长名称
parser.add_argument('-o', '--output', help='输出文件的路径', default='output.txt')# 添加一个开关参数
parser.add_argument('--verbose', action='store_true', help='增加输出的详细程度')
- 解析参数:使用
parse_args()
方法解析参数。这个方法会从sys.argv
中读取参数,并根据之前定义的规则进行解析。
args = parser.parse_args()
- 使用参数:解析后的参数存储在
args
对象中,你可以根据需要使用它们。
if args.verbose:print('详细模式已开启')print(f'输入文件:{args.input}')
if hasattr(args, 'output'):print(f'输出文件:{args.output}')
将以上代码片段组合起来,我们得到一个完整的示例脚本:
import argparse# 创建解析器
parser = argparse.ArgumentParser(description='这是一个命令行工具的示例。')# 添加参数
parser.add_argument('input', help='输入文件的路径')
parser.add_argument('-o', '--output', help='输出文件的路径', default='output.txt')
parser.add_argument('--verbose', action='store_true', help='增加输出的详细程度')# 解析参数
args = parser.parse_args()# 使用参数
if args.verbose:print('详细模式已开启')print(f'输入文件:{args.input}')
if hasattr(args, 'output'):print(f'输出文件:{args.output}')
要运行这个脚本并传入参数,你可以在命令行中这样做:
python your_script.py example.txt -o result.txt --verbose
这将输出:
详细模式已开启
输入文件:example.txt
输出文件:result.txt
ArgumentParser
类提供了丰富的功能来帮助你构建复杂的命令行接口,包括但不限于子命令解析、类型检查、默认值设置等。
add_argument()
add_argument()
方法是 argparse
模块中最核心的方法之一,用于向程序中添加命令行参数。这个方法非常灵活,允许你指定参数的名称、类型、是否必需、默认值、帮助信息等。下面是对 add_argument()
方法中一些常用参数的详细介绍:
name_or_flags
- 类型:字符串或字符串列表
- 描述:参数的名称或一组名称(也称为标志)。如果是一个字符串,并且以
-
或--
开头,那么它将被视为一个标志(flag)。如果是一个字符串列表,列表中的每个元素都将被视为一个单独的标志,它们共享相同的参数值。 - 示例:
'--foo'
或['-f', '--foo']
action
- 类型:字符串或
argparse.Action
子类 - 描述:当解析到参数时,应该采取的基本动作类型。常见的动作包括
'store'
(存储值)、'store_true'
(表示布尔值 True)、'store_false'
(表示布尔值 False)、'append'
(将值追加到列表中)等。也可以自定义动作类型。 - 示例:
'store_true'
nargs
- 类型:整数或
'*'
,'?'
,'+'
- 描述:命令行参数应该消耗的输入数量。
'*'
表示消耗所有剩余的命令行参数,'?'
表示参数是可选的(并且最多只能有一个值),'+'
表示参数至少需要一个值。 - 示例:
'+'
const
- 类型:任意
- 描述:与
action
和nargs
一起使用时,const
提供了当参数不存在但需要一个默认值时的值。 - 示例:对于
'store_const'
或'append_const'
动作,const
指定了要存储或追加的常量值。
default
- 类型:任意
- 描述:如果命令行中没有提供该参数,则使用的默认值。
- 示例:
10
type
- 类型:可调用的(如函数、类型或
argparse.FileType
) - 描述:命令行参数应该被转换成的类型。可以是 Python 的内置类型(如
int
、float
、str
),也可以是自定义的类型转换函数。 - 示例:
int
choices
- 类型:容器
- 描述:参数允许的值的容器。如果命令行中的值不在此容器中,则抛出
argparse.ArgumentError
。 - 示例:
['yes', 'no', 'maybe']
required
- 类型:布尔值
- 描述:是否必须提供该命令行参数。
- 示例:
True
help
- 类型:字符串
- 描述:参数的简短描述,用于生成帮助和使用手册。
- 示例:
"Enable verbose mode"
metavar
- 类型:字符串
- 描述:在帮助消息中用于参数值的名称。如果参数有多个值(如由
nargs
指定),则可以使用{0}
、{1}
等来指定每个值的名称。 - 示例:
"FILE"
代码示例
import argparseparser = argparse.ArgumentParser(description='Example of add_argument()')# 添加一个简单的参数
parser.add_argument('--count', type=int, default=1, help='number of items')# 添加一个布尔参数
parser.add_argument('--verbose', action='store_true', help='increase output verbosity')# 添加一个具有多个值的参数
parser.add_argument('--files', nargs='+', type=argparse.FileType('r'), help='input files')# 解析命令行参数
args = parser.parse_args()# 使用参数
print(f"Count: {args.count}")
print(f"Verbose: {'on' if args.verbose else 'off'}")
for file in args.files:print(f"File: {file.name}")
在这个示例中,我们添加了三个参数:--count
是一个简单的整数参数,--verbose
是一个布尔参数,--files
是一个接受多个文件路径的参数。
世间文字八万个,唯有一字最是能杀人:情字可误人,情字可杀人。