如何使用argparse为参数创建可选值?

时间:2014-02-24 20:09:17

标签: python python-3.x argparse

我正在创建一个python脚本,我希望有一个参数来操作你输出的搜索结果数量。我目前已将参数命名为--head。这是我希望它拥有的功能:

  1. 如果未在命令行传递--head,我希望它默认为一个值。在这种情况下,一个相当大的,如80

  2. --head没有任何值传递时,我希望它默认为另一个值。在这种情况下,有限的东西,如10

  3. --head传递一个值时,我希望它存储传递的值。

  4. 以下是一些描述问题的代码:

    >>> import argparse
    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('-h',
                            '--head',
                            dest='size',
                            const=80,
                            default=10,
                            action="I don't know",
                            help='Only print the head of the output')
    >>> # OFC, that last line will fail because the action is uknown,
    ... # but here is how I'd like it to work
    ... parser.parse_args(''.split())
    Namespace(size=80)
    >>> parser.parse_args('--head'.split())
    Namespace(size=10)
    >>> parser.parse_args('--head 15'.split())
    Namespace(size=15)
    

    我知道我可能会为此编写一个自定义操作,但我首先要查看是否存在执行此操作的默认行为。

1 个答案:

答案 0 :(得分:47)

在文档中再读一遍后,我发现了我需要的内容:nargs='?'。 这与store操作一起使用,并且完全符合我的要求。

以下是一个例子:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--head',
                        dest='size',
                        const=10,
                        default=80,
                        action='store',
                        nargs='?',
                        type=int,
                        help='Only print the head of the output')
>>> parser.parse_args(''.split())
... Namespace(size=80)
>>> parser.parse_args('--head'.split())
... Namespace(size=10)
>>> parser.parse_args('--head 15'.split())
... Namespace(size=15)

来源:http://docs.python.org/3/library/argparse.html#nargs