argparse入门--轻松解析命令行参数
argparse是Python标准库中的一个模块(意味着它不需要安装),用于从命令行中解析参数。
argparse模块可以处理命令行参数的解析,并提供了一种方便的方式来定义参数的名称、类型、默认值、帮助信息等。
使用argparse模块可以轻松地编写命令行工具,并且可以自动生成帮助信息和使用说明,使得用户可以方便地了解和使用命令行工具。
引入
from argparse import ArgumentParserhelloworld
以下是一个可以快速入门的小案例
from argparse import ArgumentParser
parser = ArgumentParser(description="这是一个argparse的示例")
parser.add_argument("-a", "--a", type=int, help="a的值, type为int")
parser.add_argument("-a", "--b", type=bool, help="b的值, bool, 它的值一定为True")
python_args = parser.parse_args()
print(python_args)
print(python_args.a)
print(python_args.b) # 如果不传入b,值为None
# print(python_args.c) # 如果不使用`add_argument`,则会报错'Namespace' object has no attribute 'c'使用argparse,首先会经历三步:
导入
ArgumentParser,并初始化它调用
add_argument函数,添加想让用户输入的参数调用
parse_args函数,解析用户输入的参数,并用这些参数达成我们想要的动作
创建解析器
我们可以使用ArgumentParser来创建一个命令行解析器
from argparse import ArgumentParser
parser = ArgumentParser(description="这是一个argparse的示例")在ArgumentParser中,除了description,还有其他一些常用的参数,下面是其中的一些重要选项:
prog: (可选) 指定程序名。如果不指定,则会使用sys.argv[0](即脚本的名字)。usage: (可选) 指定帮助信息中显示的用法字符串。如果不指定,则 argparse 会从添加的参数推断出用法。description: (可选) 一段简短的描述性文本,将在帮助信息的顶部显示。epilog: (可选) 一段描述性文本,将在帮助信息的底部显示。parents: (可选) 一个包含其他ArgumentParser对象的列表,这些对象定义了应该包含在当前解析器中的参数。这可以用来继承参数。formatter_class: (可选) 一个用于格式化帮助信息的类。默认是argparse.HelpFormatter,也可以选择其他格式器,例如argparse.RawDescriptionHelpFormatter和argparse.ArgumentDefaultsHelpFormatter。prefix_chars: (可选) 字符串,指定可选参数的前缀字符。默认是-。fromfile_prefix_chars: (可选) 字符串,指定可选参数可以从文件读取的前缀字符。例如,如果设置为@,则可以使用@filename从文件读取参数。argument_default: (可选) 默认应用于所有参数的默认值。如果未指定,则不设置默认值。conflict_handler: (可选) 指定如何处理冲突的参数定义。可能的值有error,resolve,ignore,always。add_help: (可选) 是否添加-h/--help选项。默认为 True。
一般description用得比较多,可以这么调用
from argparse import ArgumentParser
# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser(
    prog='my_program',
    usage='%(prog)s [options] arg1 arg2',
    description='This is a sample program that processes some integers.',
    epilog='This is where you can put additional information about the program.',
    formatter_class=argparse.ArgumentDefaultsHelpFormatter,
    prefix_chars='-+',
    fromfile_prefix_chars='@',
    conflict_handler='resolve',
    add_help=True
)添加命令行参数
使用add_argument为模块添加命令行参数
from argparse import ArgumentParser
parser = ArgumentParser(description="这是一个argparse的示例")
parser.add_argument("-a", "--a", type=int, help="a的值, type为int")
parser.add_argument("-a", "--b", type=bool, help="b的值, bool, 它的值一定为True")以下是一些常用参数及其说明:
基本参数
name_or_flags: 必需参数,可以是一个字符串或一个字符串列表。它指定了参数的名称和/或可选标志。位置参数:只提供名称,如
add_argument("x")。可选参数:提供一个或多个标志,如
add_argument("-x", "--example")。
其他常用参数
action: (可选) 指定当参数在命令行中被找到时采取的动作。默认是store,下面是该参数可以传入的值:store: 将参数值存储到命名空间中。store_const: 存储常量值,通常与 const 配合使用。store_true/store_false: 在命令行中出现时分别存储 True/False。append: 将值附加到列表中。append_const: 将常量值附加到列表中。count: 计算命令行中该参数出现的次数。extend: 将值扩展到列表中(适用于多个值)。help: 显示帮助信息并退出。version: 输出版本信息并退出。
nargs: (可选) 指定应该从命令行读取多少个参数。默认是 None,意味着读取单个参数。N: 读取 N 个参数并将它们作为列表返回。?: 读取 0 或 1 个参数。*: 读取 0 个或更多参数。+: 读取 1 个或更多参数。
const: (可选) 与某些 action 结合使用时指定的常量值。default: (可选) 如果命令行中没有提供参数时的默认值。type: (可选) 指定参数的类型转换函数,默认是 str。choices: (可选) 参数的有效值列表。如果提供的值不在列表中,则抛出错误。required: (可选) 指定参数是否是必需的。对于位置参数,默认为 True;对于可选参数,默认为 False。help: (可选) 帮助字符串,用于生成帮助消息。metavar: (可选) 在帮助字符串中使用的参数的元变量名称。dest: (可选) 指定在命名空间中存储结果的属性名。
from argparse import ArgumentParser
# 创建 ArgumentParser 对象
parser = ArgumentParser(description="这是一个argparse的示例")
# 添加位置参数
parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator')
# 添加可选参数
parser.add_argument('-s', '--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)')
# 添加带有默认值的可选参数
parser.add_argument('-v', '--verbosity', type=int, default=1, choices=[0, 1, 2], help='set the verbosity level')
# 添加 store_true 动作的可选参数
parser.add_argument('--debug', action='store_true', help='enable debug mode')命令输入
在我们用命令行调用改参数时,如何输入参数呢?
以helloworld为例子,将改python代码命名为test.py,我们可以在命令行中输入以下命令:
python -u test.py -a 1此时-a参数会传到python模块中
注意当add_argument的形参required设置为True后,则必须输入该参数,否则会报错
解析参数
我们可以使用parse_args解析命令行传递的参数
from argparse import ArgumentParser
parser = ArgumentParser(description="这是一个argparse的示例")
parser.add_argument("-a", "--a", type=int, help="a的值, type为int")
python_args = parser.parse_args()
print(python_args)
print(python_args.a)parse_args会传回一个Namespace对象,如果需要查看参数的返回的数据,只需要直接调用即可
以以上为例,上面添加了一个-a的参数,下面使用python_args.a去获取该参数返回的数据
值得注意的是,如果命令行不传入参数,则返回None
如果上面没有添加某个参数,下面调用了一个未知的参数就会报错
还是以以上为例,如果使用python_args.c,则会报错'Namespace' object has no attribute 'c'。因为add_argument没有添加c这个参数