argparse

2019-04-20  本文已影响0人  脏脏包盛

就像linux 后面的参数一样。
argparse模块可以轻松编写用户友好的命令行界面。该程序定义了它需要的参数,argparse 并将弄清楚如何解析它们sys.argvargparse 当用户给程序提供无效参数时,该模块还会自动生成帮助和使用消息并发出错误

示例

以下代码是一个Python程序,它获取整数列表并生成总和或最大值:

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代码保存在一个名为的文件中prog.py,它可以在命令行运行并提供有用的帮助消息:

$ python prog.py -h
usage: prog.py [-h] [--sum] N [N ...]

Process some integers.

positional arguments:
 N           an integer for the accumulator

optional arguments:
 -h, --help  show this help message and exit
 --sum       sum the integers (default: find the max)

使用适当的参数运行时,它会输出命令行整数的总和或最大值:

$ python prog.py 1 2 3 4
4

$ python prog.py 1 2 3 4 --sum
10

如果传入无效参数,则会发出错误:

$ python prog.py a b c
usage: prog.py [-h] [--sum] N [N ...]
prog.py: error: argument N: invalid int value: 'a'

以下部分将引导您完成此示例。
1.创建解析器创建一个ArgumentParser对象

>>> parser = argparse.ArgumentParser(description='Process some integers.')

2.添加参数
使用add_argument()方法填充有关程序参数的信息。parse_args()调用时会存储和使用此信息

>>> 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)')

稍后,调用parse_args()将返回具有两个属性的对象,integers并且accumulate。该integers属性将是一个或多个整数的列表,该accumulate属性将是sum()函数(如果--sum在命令行中指定)或max()函数(如果不是)。
3.解析参数
ArgumentParser通过该parse_args()方法解析参数 。这将检查命令行,将每个参数转换为适当的类型,然后调用相应的操作。在大多数情况下,这意味着Namespace将从命令行解析的属性构建一个简单的对象:

>>> parser.parse_args(['--sum', '7', '-1', '42'])
Namespace(accumulate=<built-in function sum>, integers=[7, -1, 42])

ArgumentParser对象

class argparse.ArgumentParser(prog = None,usage = None,description = None,epilog = None,parents = [],formatter_class = argparse.HelpFormatter,prefix_chars =' - ',fromfile_prefix_chars = None,argument_default = None,conflict_handler ='error',add_help = True,allow_abbrev = True )

创建一个新ArgumentParser对象。所有参数都应作为关键字参数传递。每个参数在下面都有自己更详细的描述,但简而言之,它们是:

在版本3.5中更改:添加了allow_abbrev参数。

add_argument()方法

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
定义应如何解析单个命令行参数。每个参数在下面都有自己更详细的描述,但简而言之,它们是:

name of flags

add_argument()方法必须知道是否需要可选参数,如-f--foo,或位置参数,如文件名列表。add_argument()因此,传递给的第一个参数 必须是一系列标志或简单的参数名称。例如,可以创建一个可选参数,如:

>>> parser.add_argument('-f', '--foo')
>>> parser.add_argument('bar')

parse_args()被调用时,可选的参数将被识别-的前缀,而其余的参数将被认为是位置:
可选参数就是可以输入也可以不输入,位置参数表示必须有的参数

>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('-f', '--foo')
>>> parser.add_argument('bar')
>>> parser.parse_args(['BAR'])
Namespace(bar='BAR', foo=None)
>>> parser.parse_args(['BAR', '--foo', 'FOO'])
Namespace(bar='BAR', foo='FOO')
>>> parser.parse_args(['--foo', 'FOO'])
usage: PROG [-h] [-f FOO] bar
PROG: error: the following arguments are required: bar

default

可以在命令行中省略所有可选参数和一些位置参数。值默认为的default关键字参数 指定在命令行参数不存在时应使用的值。对于可选参数,在命令行中不存在选项字符串时使用该值:add_argument()None``default

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', default=42)
>>> parser.parse_args(['--foo', '2'])
Namespace(foo='2')
>>> parser.parse_args([])
Namespace(foo=42)
上一篇 下一篇

猜你喜欢

热点阅读