关键词

python中parser.add_argument()用法实例(命令行选项、参数和子命令解析器)

Python中parser.add_argument()用法实例

在Python中,如果我们要从命令行获取参数,则需要用到argparse模块。而在argparse模块中,parser.add_argument()就是添加命令行参数的方法,是argparse的核心。

本文将详细讲解parser.add_argument()方法的用法,并通过实例演示如何使用命令行选项、参数和子命令解析器。

命令行选项

命令行选项通常以一个破折号开头,就像python script.py -h命令中的-h选项。使用parser.add_argument()方法添加命令行选项的基本语法如下:

parser.add_argument(option_flags, dest, help, default, type)
  • option_flags:命令行选项的名称,一般以破折号作为前缀。例如,-h就是一个命令行选项。
  • dest:选项值将被存储为的属性名称。这是一个将选项值存储在命名空间对象中的名称。
  • help:选项的描述信息。
  • default:选项的默认值。
  • type:选项值的数据类型,可以是intfloatstr等。

接下来,通过一个实例来演示如何添加一个命令行选项。假设有一个script.py脚本,需要支持-n选项来设置脚本输出的行数。代码如下:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-n", dest="lines", help="output n lines", type=int)
args = parser.parse_args()

if args.lines:
    for i in range(args.lines):
        print("line {}".format(i))

在上述代码中,-n是一个命令行选项,dest参数指定了选项值存储为args.lines属性,help参数提供了选项的帮助信息,type参数指定了选项值的数据类型。

运行该脚本时,使用-n参数即可设置脚本输出的行数。例如,输入python script.py -n 5,脚本将输出5行。如果不使用-n选项,则默认输出一行。

命令行参数

命令行参数是指在命令行直接输入的值,如python script.py arg1 arg2中的arg1arg2

和命令行选项类似,使用parser.add_argument()方法添加命令行参数的基本语法如下:

parser.add_argument(name_or_flags, dest, help, default, type)
  • name_or_flags:命令行参数名称或者缩写,可以是一个字符串或者一个字符串列表。例如,arg1就是一个命令行参数。
  • dest:参数值将被存储为的属性名称。这是一个将参数值存储在命名空间对象中的名称。
  • help:参数的描述信息。
  • default:参数的默认值。
  • type:参数值的数据类型,可以是intfloatstr等。

和命令行选项类似,我们也通过一个实例来演示如何添加命令行参数。假设有一个script.py脚本,需要支持两个命令行参数arg1arg2,输出它们的和。代码如下:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("arg1", help="first argument", type=int)
parser.add_argument("arg2", help="second argument", type=int)
args = parser.parse_args()

result = args.arg1 + args.arg2
print("The result is", result)

在上述代码中,arg1arg2是两个命令行参数,dest参数分别指定了参数值存储为args.arg1args.arg2属性,help参数提供了参数的帮助信息,type参数指定了参数值的数据类型。

运行该脚本时,输入两个参数即可计算它们的和。例如,输入python script.py 5 10,脚本将输出The result is 15

子命令解析器

在实际开发中,一个Python脚本可能会有多个命令和选项,这时候我们可以使用子命令解析器来为这些命令和选项组织一个层级结构。

使用子命令解析器需要先创建一个子命令解析器对象,然后再在该对象上添加相应的命令和选项。

下面是一个示例,演示如何创建一个支持子命令的脚本。假设有一个script.py脚本,需要支持两个子命令foobar,分别输出不同的信息。代码如下:

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()

foo_parser = subparsers.add_parser("foo")
foo_parser.add_argument("-n", dest="lines", help="output n lines", type=int)
foo_parser.set_defaults(func=lambda x: foo(x))

bar_parser = subparsers.add_parser("bar")
bar_parser.set_defaults(func=lambda x: bar(x))

def foo(args):
    if args.lines:
        for i in range(args.lines):
            print("foo line {}".format(i))

def bar(args):
    print("bar")

args = parser.parse_args()
args.func(args)

在上述代码中,首先创建了一个命令行解析器对象,并使用parser.add_subparsers()方法创建了一个子命令解析器。

然后,使用add_parser()方法创建了两个子命令foobar,分别添加了相应的选项。对于foo子命令,我们添加了-n选项来设置输出行数;对于bar子命令,我们没有添加选项。这里使用set_defaults()方法为每个子命令设置了一个函数来执行相应的操作。

最后,在parser.parse_args()中获取了命令行参数,并通过args.func(args)来调用相应的子命令。

在运行该脚本时,可以使用python script.py foo -n 5命令来执行foo子命令并输出5行信息,使用python script.py bar命令来执行bar子命令并输出bar信息。

总结

本文介绍了Python中parser.add_argument()方法的用法,包括如何添加命令行选项、参数和子命令解析器。通过实例演示,我们看到了如何使用这些功能来构建一个完整的命令行工具。

本文链接:http://task.lmcjl.com/news/15033.html

展开阅读全文