python之argparse

Python 做为一个脚本语言,可以很方便地写各种工具。当你在服务端要运行一个工具或服务时,输入参数似乎是一种硬需(当然你也可以通过配置文件来实现)。

如果要以命令行执行,那你需要解析一个命令行参数解析的模块来帮你做这个苦力活。

Python 本身就提供了三个命令行参数解析模块,我这里罗列一下它们的大致情况供你了解。

  • getopt,只能简单的处理命令行参数
  • optparse,功能强大,易于使用,可以方便地生成标准的、符合Unix/Posix 规范的命令行说明。
  • argparse,使其更加容易的编写用户友好的命令行接口。它所需的程序进程了参数定义,argparse将更好的解析sys.argv。同时argparse模块还能自动生成帮助及用户输入错误参数时的提示信息。

 argparse 这一神器,它几乎能满足对命令解析器的所有需求。它支持解析一参数多值,可以自动生成help命令和帮助文档,支持子解析器,支持限制参数取值范围等等功能。

构建argparse模块对命令行界面的支持 argparse.ArgumentParser的一个实例。 它是一个容器 参数规范,并具有将解析器作为整体应用的选项:

parser = argparse.ArgumentParser(
                    prog='ProgramName',
                    description='What the program does',
                    epilog='Text at the bottom of help')

ArgumentParser.add_argument()方法附加单个参数 规范到解析器。 它支持位置参数、 接受值和开/关标志:

parser.add_argument('filename')           # positional argument
parser.add_argument('-c', '--count')      # option that takes a value
parser.add_argument('-v', '--verbose',
                    action='store_true')  # on/off flag

ArgumentParser.parse_args()方法运行解析器并放置 argparse.Namespace对象中提取的数据

args = parser.parse_args()
print(args.filename, args.count, args.verbose)

he add_argument() method

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])¶

  • name or flags - 名称或选项字符串列表,例如foo 或者-f, --foo

  • action - 当此参数为 在命令行中遇到。

创建自定义操作的推荐方法是扩展Action, 覆盖__call__方法,并可选地覆盖__init__和 format_usage方法。

  • nargs - 应该使用的命令行参数的数量。

 nargs关键字参数将一个 不同数量的命令行参数。 支持者 值为:N(整数)。 N将收集来自命令行的参数 一起列成一个清单。 例如

parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs=2)
parser.add_argument('bar', nargs=1)
parser.parse_args('c --foo a b'.split())

输出的值为:

Namespace(bar=['c'], foo=['a', 'b'])
  • const - 某些操作和参数选择所需的常量值。.

  • default - 如果参数不在命令行,如果命名空间对象中不存在

如果default值是一个字符串,则解析器会将该值视为 是一个命令行参数 特别是,分析器应用任何类型 转换参数(如果提供),然后再设置 Namespace返回值。 否则,解析器将按原样使用该值:

parser = argparse.ArgumentParser()
parser.add_argument('--length', default='10', type=int)
parser.add_argument('--width', default=10.5, type=int)
parser.parse_args()
Namespace(length=10, width=10.5)
  • type - 命令行参数应转换为的类型

  • choices - 参数允许值的序列

  • required - 是否可以省略命令行选项

一般来说,argparse模块假设像-f--bar这样的标志 指示可选参数,这些参数在命令行中始终可以省略。 要使选项成为必需选项,可以为True指定required= add_argument()的关键字参数:

parser = argparse.ArgumentParser()
parser.add_argument('--foo', required=True)
parser.parse_args(['--foo', 'BAR'])

parser.parse_args([])

输出的值为:

usage: [-h] --foo FOO
: error: the following arguments are required: --foo
  • help -参数作用的简要描述

help值是一个字符串,包含参数的简要说明。 当用户请求帮助时(通常通过在 命令行),这些-h描述将与每个 参数:

parser = argparse.ArgumentParser(prog='frobble')
parser.add_argument('--foo', action='store_true',
                    help='foo the bars before frobbling')
parser.add_argument('bar', nargs='+',
                    help='one of the bars to be frobbled')
parser.parse_args(['-h'])

输出值为:

usage: frobble [-h] [--foo] bar [bar ...]

positional arguments:
 bar     one of the bars to be frobbled

options:
 -h, --help  show this help message and exit
 --foo   foo the bars before frobbling
  • metavar - 使用消息中参数的名称。

  • dest - 要添加到返回的对象的属性的名称 。

nargs关键字参数将一个 不同数量的命令行参数。 支持者 值为:N(整数)。 N将收集来自命令行的参数 一起列成一个清单。 例如

parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs=2)
parser.add_argument('bar', nargs=1)
parser.parse_args('c --foo a b'.split())

输出的值为:

Namespace(bar=['c'], foo=['a', 'b'])

你可能感兴趣的:(python,python)