Python命令行参数,可以为空或从选择列表中选择

问题描述 投票:0回答:1

我正在研究用于控制Docker映像构建的脚本。我目前支持Centos的一个或多个基本映像以及Debian的一个或多个。我想将“ --centos”或“ --debian”默认为最新版本。但是,如果用户要构建较旧的副本,则该副本应来自选择列表。因此,我正在寻找以下方面的混合体:parser.add_argument('-centos',choices = ['centos-6','centos-7'])和parser.add_argument('-centos')

所以我可以像这样运行脚本:

python dobuild.py --centos #would build the latest centos in the list

python dobuild.py --centos centos-6 #would build the older copy

但是

python dobuild.py --centos centos-5 #would return an 'invalid choice' error

我尝试过choices=['centos-6','centos-7','']choices=['centos-6','centos-7', []]

出于完整性考虑:python dobuild.py --centos --debian #would build the latest centos AND latest debian in the list等。 。 。

python command-line-arguments argparse
1个回答
0
投票

要在默认情况下添加此可选参数,可以使用nargs='?'const='<default>'Here in the docs

请注意,对于可选参数,还有另外一种情况-选项字符串存在,但后面没有命令行参数。在这种情况下,将产生const的值:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--centos', choices=['centos-6', 'centos-7'], nargs='?', const='centos-7')

使用此解析器:

>>> parser.parse_args([])
Namespace(centos=None)
>>> parser.parse_args(['--centos'])
Namespace(centos='centos-7')
>>> parser.parse_args(['--centos', 'centos-6'])
Namespace(centos='centos-6')
© www.soinside.com 2019 - 2024. All rights reserved.