【问题标题】:How to make an optional value for argument using argparse?如何使用 argparse 为参数创建可选值?
【发布时间】:2014-03-26 17:11:06
【问题描述】:

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

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

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

  3. --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)

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

【问题讨论】:

    标签: python python-3.x argparse


    【解决方案1】:

    在阅读了更多文档后,我找到了我需要的东西: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

    【讨论】:

    • 优秀。它甚至还支持*+,其结果可能来自知识正则表达式。
    猜你喜欢
    • 2016-05-30
    • 2012-08-14
    • 1970-01-01
    • 2013-03-23
    • 2019-04-13
    • 2015-11-07
    • 2022-01-19
    • 1970-01-01
    • 2019-01-28
    相关资源
    最近更新 更多