我正在创建一个 python 脚本,我想在其中使用一个参数来处理作为输出获得的搜索结果的数量。我目前将参数命名为 --head 。这是我希望它具有的功能:

  • --head 未在命令行中传递时,我希望它默认为一个值。在这种情况下,一个相当大的,比如 80
  • --head 没有任何值传递时,我希望它默认为另一个值。在这种情况下,一些有限的东西,比如 10
  • --head 传递一个值时,我希望它存储传递的值。

  • 下面是一些描述问题的代码:
    >>> 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)
    

    我知道我可能可以为此编写自定义操作,但我首先想看看是否有任何默认行为可以做到这一点。

    最佳答案

    在进一步阅读文档后,我找到了我需要的: 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

    关于python - 如何使用argparse为参数设置可选值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21997933/

    10-16 03:11