如何使用argparse为参数生成可选值?

2024-04-19 21:43:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个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)

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


Tags: the脚本parser参数size数量parseis
1条回答
网友
1楼 · 发布于 2024-04-19 21:43:24

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

相关问题 更多 >