您的位置:

Python命令行参数解析

一、argparse模块和参数解析

Python提供了argparse模块来实现命令行参数解析,该模块具有使用简单、灵活的特点,可以轻松实现复杂的命令行参数解析。在使用argparse模块进行参数解析时,需要按照以下步骤进行:

  1. 创建ArgumentParser对象
  2. 添加命令行选项和参数
  3. 解析命令行参数

下面是一个简单的示例:

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方法有多个参数,下面分别介绍几个常用的参数:

  1. name or flags:
    '-f', '--foo' 这种形式是完全一致的,'-' 和 '--' 是互换的
  2. action:
    表示这个参数在命令行遇到时的动作,默认情况下是存储参数值,也可以要求其执行一个指定的动作,比如 count、version 或者其他各种自定义 action,这个选项参数通常不需要值
  3. nargs:
    命令行参数的数量,可以是固定数量(比如 2),或者是可变长度的('*' 或 '+'),也可以指定一个范围('1~3')。
  4. const:
    一些 action 和 nargs 选项要求其指定一个常量值,比如将 --version 变成一个值,用于对应的参数。
  5. default:
    如果命令行中没有任何输入,则默认使用此值。
  6. type:
    将命令行参数转换为其他类型,如整数、浮点数、布尔值等。
  7. choices:
    可以限制参数的值,如:choices=['spam', 'eggs', 'ham']。
  8. required:
    表示这个命令行选项是否必须要使用,默认为False。
  9. 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命令行参数解析的详细介绍,希望对大家有所帮助。