在 Python 中,ArgumentParser 是 argparse 模块提供的一个命令行参数解析器,用于解析命令行参数。
一、主要参数介绍:
1. description (str):用于描述整个程序或命令行工具的简短说明。
2. add_argument(name or flags, ...):添加命令行参数。name or flags 可以是一个位置参数(如 'name')或一个选项参数(如 '--age' 或 '-a')。其他参数用于指定参数的类型、默认值、帮助信息等。
type: 参数的类型。
default: 参数的默认值。
help: 参数的帮助信息。
3. parse_args(): 解析命令行参数,并返回一个命名空间,其中包含解析后的参数。
4. allow_abbrev (bool): 默认为 True。如果设置为 False,则禁用参数名的缩写形式。例如,如果有两个参数 --file 和 --force,允许缩写时可以使用 --fil,禁用缩写时需要写完整的参数名。
二、使用方法:
1. 在脚本中创建 ArgumentParser 实例,可以添加整体描述。
2. 使用 add_argument 方法添加需要的命令行参数。
3. 使用 parse_args 方法解析命令行参数,并获得解析后的参数的值。
4. 访问解析后的参数的值,然后在程序中使用这些参数。
import argparse
# 创建 ArgumentParser 实例
parser = argparse.ArgumentParser(description='Description of your program')
# 添加命令行参数
parser.add_argument('name', type=str, help='Description of the name parameter')
parser.add_argument('--age', type=int, default=25, help='Description of the age parameter')
# 解析命令行参数
args = parser.parse_args()
# 访问解析后的参数
print('Name:', args.name)
print('Age:', args.age)
# 打印完整的args对象
print('Complete args:', vars(args))
Name: John
Age: 30
Complete args: {'name': 'John', 'age': 30}
三、在命令行中运行脚本时,可以通过指定参数值来影响程序的行为。例如:
python script.py John --age 30
这将在脚本中解析参数,args.name 的值将是 'John',args.age 的值将是 30
四、额外的方法
parse_known_args(args=None, namespace=None): 类似于 'parse_args',但是不会报错,如果有未知参数,它会将其放在一个列表中返回。
import argparse
# 创建 ArgumentParser 实例
parser = argparse.ArgumentParser(description='Example script')
# 添加命令行参数
parser.add_argument('--name', type=str, help='Name parameter')
parser.add_argument('--age', type=int, help='Age parameter')
parser.add_argument('--verbose', action='store_true', help='Verbose flag')
# 解析命令行参数,获取已知参数和未知参数
args, unknown_args = parser.parse_known_args()
# 输出已知参数和未知参数
print('Known args:', args)
print('Unknown args:', unknown_args)
假设你运行以下命令:
python script.py --name John --age 30 --verbose --extra_arg1 value1 --extra_arg2 value2
输出:
Known args: Namespace(name='John', age=30, verbose=True)
Unknown args: ['--extra_arg1', 'value1', '--extra_arg2', 'value2']
已知参数包含了' --name'、'--age'、'--verbose' 这些由 ArgumentParser 知道的参数。未知参数包含了额外的参数' --extra_arg1 value1'、 '--extra_arg2 value2',这些参数不在 ArgumentParser 中定义。
这对于在程序中处理一些特定参数并将其余参数传递给其他命令行工具或模块很有用。
五、注意:
在 Python 的 argparse 模块中,通过 ArgumentParser 定义的参数在代码运行过程中是可以更改的。然而,更改后的值只会影响后续的代码,而不会影响已经执行的部分。
具体来说,如果你在运行时更改了 argparse 参数的值,那么这个更改会影响到接下来的代码执行。但如果某个参数已经在解析命令行参数时确定,并且代码已经执行,那么这个参数的值将不再受后续更改的影响。
import argparse
# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser()
parser.add_argument('--example_param', type=int, default=42, help='An example parameter')
# 解析命令行参数
args = parser.parse_args()
# 输出初始参数值
print("Initial value of example_param:", args.example_param)
# 更改参数的值
args.example_param = 99
# 输出更改后的参数值
print("Updated value of example_param:", args.example_param)
# 后续代码可以使用更新后的参数值
# 例如,在后续的函数中使用 args.example_param 的值
# 输出初始参数值
Initial value of example_param: 42
# 输出更改后的参数值
Updated value of example_param: 99
六、详细信息:
官方网址:argparse 官方文档