一、argparse模块和参数解析
Python提供了argparse模块来实现命令行参数解析,该模块具有使用简单、灵活的特点,可以轻松实现复杂的命令行参数解析。在使用argparse模块进行参数解析时,需要按照以下步骤进行:
- 创建ArgumentParser对象
- 添加命令行选项和参数
- 解析命令行参数
下面是一个简单的示例:
import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print(args.accumulate(args.integers))
运行该代码,带上一些参数和选项,你就可以看到结果:
$ python argparse_demo.py 1 2 3 4 4 $ python argparse_demo.py 1 2 3 4 --sum 10
在这个例子中,我们实现了一个名为"Process some integers."的命令,它带有一些整数,这些整数可以使用"--sum"选项进行求和或者求最大值(默认)。
二、add_argument方法和参数解析
使用ArgumentParser对象的add_argument方法添加选项和参数,可以实现灵活的命令行参数解析。add_argument方法有多个参数,下面分别介绍几个常用的参数:
- name or flags:
'-f', '--foo' 这种形式是完全一致的,'-' 和 '--' 是互换的 - action:
表示这个参数在命令行遇到时的动作,默认情况下是存储参数值,也可以要求其执行一个指定的动作,比如 count、version 或者其他各种自定义 action,这个选项参数通常不需要值 - nargs:
命令行参数的数量,可以是固定数量(比如 2),或者是可变长度的('*' 或 '+'),也可以指定一个范围('1~3')。 - const:
一些 action 和 nargs 选项要求其指定一个常量值,比如将 --version 变成一个值,用于对应的参数。 - default:
如果命令行中没有任何输入,则默认使用此值。 - type:
将命令行参数转换为其他类型,如整数、浮点数、布尔值等。 - choices:
可以限制参数的值,如:choices=['spam', 'eggs', 'ham']。 - required:
表示这个命令行选项是否必须要使用,默认为False。 - help:
使用-h/--help调用时显示。
下面是一个实现了一些参数选项的例子:
import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('--foo', action='store_true', help='an boolean flag option') parser.add_argument('bar', nargs=1, help='a positional argument') parser.add_argument('--baz', choices=['one', 'two', 'three'], help='a option with choices') args = parser.parse_args() print(args)
运行该代码:
$ python argparse_demo.py --foo arg1 --baz=one arg2 Namespace(bar=['arg2'], baz='one', foo=True)
在这个例子中,我们添加了一个布尔型选项"--foo",一个需要字符串参数的位置选项"bar",一个带有选项限制的"baz"选项。
三、subparser子命令
有时我们需要在一个命令行程序中实现多个不同的功能,这时可以使用subparser子命令。这个功能可以通过给ArgumentParser对象add_subparsers方法传递参数来完成,然后用子命令名称在命令行上触发对应的操作。例如:
import argparse parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(help='sub-command help') # create the parser for the "foo" command parser_foo = subparsers.add_parser('foo', help='foo help') parser_foo.add_argument('--bar', help='bar help') # create the parser for the "bar" command parser_bar = subparsers.add_parser('bar', help='bar help') parser_bar.add_argument('bar') args = parser.parse_args() print(args)
我们创建了两个子命令:foo和bar,并为它们分别添加了不同的选项。然后,根据在命令行中输入的子命令名称,在命令解析时将选择合适的代码执行。例如:
$ python subparsers_demo.py foo --bar XYZ Namespace(bar='XYZ')
在这个例子中,我们实现了两个子命令foo和bar,foo选项中添加了"--bar"选项,bar选项中添加了一个参数,可以通过命令行输入来调用子命令。
四、小结
Python提供了argparse模块,可以轻松地完成命令行参数解析。使用add_argument方法添加选项和参数可以实现灵活的命令行参数解析,可以通过参数来进行限制和定义。另外,使用subparser子命令可以处理多个命令行操作。以上为本文对Python命令行参数解析的详细介绍,希望对大家有所帮助。