美文网首页
argparse模块-add_argument方法

argparse模块-add_argument方法

作者: 一技破万法 | 来源:发表于2020-05-14 16:38 被阅读0次

    ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
    定义单个的命令行参数应当如何解析:

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

    • action - 当参数在命令行中出现时使用的动作基本类型。

    • nargs - 命令行参数应当消耗的数目。

    • const - 被一些 actionnargs 选择所需求的常数。

    • default - 当参数未在命令行中出现时使用的值。

    • type - 命令行参数应当被转换成的类型。

    • choices - 可用的参数的容器。

    • required - 此命令行选项是否可省略 (仅选项可用)。

    • help - 一个此选项作用的简单描述。

    • metavar - 在使用方法消息中使用的参数值示例。

    • dest - 被添加到 parse_args() 所返回对象上的属性名。




    name or flags

    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
    

    action

    ArgumentParser对象将命令行参数与动作相关联。这些动作可以做与他们相关联的命令行参数的任何事,尽管大多数动作只是简单的向parse_args()返回的对象上添加属性。action命名参数指定了这个命令行参数应当如何处理。

    ‘store’ - 存储参数的值。默认动作。
    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('--foo')
    >>> parser.parse_args('--foo 1'.split())
    Namespace(foo='1')
    
    ‘store_const' - 存储被const命名参数指定的值。’store_const’动作通常用在选项中来指定一些标志。
    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('--foo', action='store_const', const=42)
    >>> parser.parse_args(['--foo'])
    Namespace(foo=42)
    
    'store_true' and 'store_false' - 分别用于存储True和False值的特殊用例。
    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('--foo', action='store_const', const=42)
    >>> parser.parse_args(['--foo'])
    Namespace(foo=42)
    
    'append' - 存储一个列表,并且将每个参数值追加到列表中。(多用于允许多次使用选项)
    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('--foo', action='append')
    >>> parser.parse_args('--foo 1 --foo 2'.split())
    Namespace(foo=['1', '2'])
    

    parser = argparse.ArgumentParser()
    parser.add_argument('--foo', action='append')
    parser.parse_args('--foo 1 --foo 2'.split())
    Namespace(foo=['1', '2'])

    #####‘append_const’ - 存储一个列表,并将const命名参数指定的值追加到列表中。(const默认为None,动作一般在多个参数需要在同一列表中存储常数时会用)
    

    parser = argparse.ArgumentParser()
    parser.add_argument('--str', dest='types', action='append_const', const=str)
    parser.add_argument('--int', dest='types', action='append_const', const=int)
    parser.parse_args('--str --int'.split())
    Namespace(types=[<class 'str'>, <class 'int'>])

    #####'count' - 计算一个关键字参数出现的数目或次数。
    

    parser.add_argument('--verbose', '-v', action='count', default=0)
    parser.parse_args(['-vvv'])
    Namespace(verbose=3)

    ####nargs
    ArgumentParser对象通常关联一个单独的命令行参数到一个单独的被执行的动作。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'])

    ##### ?。如果当前没有命令行参数,则会产生default值,如果有用-选项字符串时,则会产生const值。
    

    parser = argparse.ArgumentParser()
    parser.add_argument('--foo', nargs='?', const='c', default='d')
    parser.add_argument('bar', nargs='?', default='d')
    parser.parse_args(['XX', '--foo', 'YY'])
    Namespace(bar='XX', foo='YY')
    parser.parse_args(['XX', '--foo'])
    Namespace(bar='XX', foo='c')
    parser.parse_args([])
    Namespace(bar='d', foo='d')

    nargs='?'还可以允许可选的输入输出文件
    

    parser = argparse.ArgumentParser()
    parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
    ... default=sys.stdin)
    parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'),
    ... default=sys.stdout)
    parser.parse_args(['input.txt', 'output.txt'])
    Namespace(infile=<_io.TextIOWrapper name='input.txt' encoding='UTF-8'>,

          outfile=<_io.TextIOWrapper name='output.txt' encoding='UTF-8'>)
    

    parser.parse_args([])
    Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>,
    outfile=<_io.TextIOWrapper name='<stdout>' encoding='UTF-8'>)

    ##### '*' 。所有当前命令行参数被聚集到一个列表中,通过nargs=‘*’来实现多个选项。
    

    parser = argparse.ArgumentParser()
    parser.add_argument('--foo', nargs='')
    parser.add_argument('--bar', nargs='
    ')
    parser.add_argument('baz', nargs='*')
    parser.parse_args('a b --foo x y --bar 1 2'.split())
    Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y'])

    #####argarse.REMAINDER。所有剩余的命令行参数被聚集到一个列表中。
    

    parser = argparse.ArgumentParser(prog='PROG')
    parser.add_argument('--foo')
    parser.add_argument('command')
    parser.add_argument('args', nargs=argparse.REMAINDER)
    print(parser.parse_args('--foo B cmd --arg1 XX ZZ'.split()))
    Namespace(args=['--arg1', 'XX', 'ZZ'], command='cmd', foo='B')

    ####const
    [`add_argument()`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser.add_argument "argparse.ArgumentParser.add_argument") 的``const`` 参数用于保存不从命令行中读取但被各种 [`ArgumentParser`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser "argparse.ArgumentParser") 动作需求的常数值。最常用的两例为:
    
    *   当 [`add_argument()`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser.add_argument "argparse.ArgumentParser.add_argument") 通过 `action='store_const'` 或 `action='append_const` 调用时。这些动作将 `const` 值添加到 [`parse_args()`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser.parse_args "argparse.ArgumentParser.parse_args") 返回的对象的属性中。在 [action](https://docs.python.org/zh-cn/3/library/argparse.html#action) 的描述中查看案例。
    
    *   当 [`add_argument()`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser.add_argument "argparse.ArgumentParser.add_argument") 通过选项(例如 `-f` 或 `--foo`)调用并且 `nargs='?'` 时。这会创建一个可以跟随零个或一个命令行参数的选项。当解析命令行时,如果选项后没有参数,则将用 `const` 代替。在 [nargs](https://docs.python.org/zh-cn/3/library/argparse.html#nargs) 描述中查看案例。
    
    对 `'store_const'` 和 `'append_const'` 动作, `const` 命名参数必须给出。对其他动作,默认为 `None`。
    ####default
    所有选项和一些位置参数可能在命令行中被忽略。[`add_argument()`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.ArgumentParser.add_argument "argparse.ArgumentParser.add_argument") 的命名参数 `default`,默认值为 `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)

    如果 `default` 值是一个字符串,解析器解析此值就像一个命令行参数。特别是,在将属性设置在 [`Namespace`](https://docs.python.org/zh-cn/3/library/argparse.html#argparse.Namespace "argparse.Namespace") 的返回值之前,解析器应用任何提供的 [type](https://docs.python.org/zh-cn/3/library/argparse.html#type) 转换参数。否则解析器使用原值:
    

    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)

    对于 [nargs](https://docs.python.org/zh-cn/3/library/argparse.html#nargs) 等于 `?` 或 `*` 的位置参数, `default` 值在没有命令行参数出现时使用。
    

    parser = argparse.ArgumentParser()
    parser.add_argument('foo', nargs='?', default=42)
    parser.parse_args(['a'])
    Namespace(foo='a')
    parser.parse_args([])
    Namespace(foo=42)

    提供 default=argparse.SUPPRESS 导致命令行参数未出现时没有属性被添加:
    

    parser = argparse.ArgumentParser()
    parser.add_argument('--foo', default=argparse.SUPPRESS)
    parser.parse_args([])
    Namespace()
    parser.parse_args(['--foo', '1'])
    Namespace(foo='1')

    
    
    
    
    
    
    ###了解更多请关注作者微信公众号:
    ![一技破万法](https://img.haomeiwen.com/i15145168/d20ffd7d3f2d89e3.gif?imageMogr2/auto-orient/strip)
    
    
    
    
    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:argparse模块-add_argument方法

          本文链接:https://www.haomeiwen.com/subject/jylinhtx.html