argparse是Python标准库中的一个模块(意味着它不需要安装),用于从命令行中解析参数。

argparse模块可以处理命令行参数的解析,并提供了一种方便的方式来定义参数的名称、类型、默认值、帮助信息等。

使用argparse模块可以轻松地编写命令行工具,并且可以自动生成帮助信息和使用说明,使得用户可以方便地了解和使用命令行工具。

引入

from argparse import ArgumentParser

helloworld

以下是一个可以快速入门的小案例

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,首先会经历三步:

  1. 导入ArgumentParser,并初始化它

  2. 调用add_argument函数,添加想让用户输入的参数

  3. 调用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.RawDescriptionHelpFormatterargparse.ArgumentDefaultsHelpFormatter

  • prefix_chars: (可选) 字符串,指定可选参数的前缀字符。默认是-

  • fromfile_prefix_chars: (可选) 字符串,指定可选参数可以从文件读取的前缀字符。例如,如果设置为@,则可以使用@filename从文件读取参数。

  • argument_default: (可选) 默认应用于所有参数的默认值。如果未指定,则不设置默认值。

  • conflict_handler: (可选) 指定如何处理冲突的参数定义。可能的值有errorresolveignorealways

  • 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这个参数

文章作者: Vsoapmac
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 soap的会员制餐厅
python 第三方库 个人分享
喜欢就支持一下吧