web-dev-qa-db-ja.com

python argparse choices with a default choice

明示的な選択肢のリストがあるPython 3アプリケーションでargparseを使用しようとしていますが、何も指定されていない場合はデフォルトです。

私が持っているコードは次のとおりです。

parser.add_argument('--list', default='all', choices=['servers', 'storage', 'all'], help='list servers, storage, or both (default: %(default)s)') 
args = parser.parse_args()
print(vars(args))

ただし、これを実行すると、オプションで次のようになります。

$ python3 ./myapp.py --list all
{'list': 'all'}

またはオプションなし:

$ python3 ./myapp.py --list
usage: myapp.py [-h] [--list {servers,storage,all}]
myapp.py: error: argument --list: expected one argument

ここに何かが足りませんか?または、選択肢が指定されたデフォルトを使用できませんか?

26
MVanOrder

@ShadowRangerに感謝します。 Subcommandsはまさにnargsおよびconstと組み合わせて必要なものです。次の作品:

parser = argparse.ArgumentParser()
subparser = parser.add_subparsers()
parser_list = subparser.add_parser('list')
parser_list.add_argument('list_type', default='all', const='all', nargs='?', choices=['all', 'servers', 'storage'])

parser_create = subparser.add_parser('create')
parser_create.add_argument('create_type', default='server', const='server', nargs='?', choices=['server', 'storage'])

args = parser.parse_args()
pprint(vars(args))

$ python3 ./myapp.py -h
usage: dotool.py [-h] {list,create} ...

Digital Ocean tool

positional arguments:
  {list,create}

optional arguments:
  -h, --help     show this help message and exit

リストオプションのみ:

$ python3 ./myapp.py list
{'list_type': 'all'}

パラメーター付きのリストオプション:

$ python3 ./myapp.py list servers
{'list_type': 'servers'}
7
MVanOrder

nargsおよびconst引数をadd_argumentに渡します。

parser.add_argument('--list',
                    default='all',
                    const='all',
                    nargs='?',
                    choices=['servers', 'storage', 'all'],
                    help='list servers, storage, or both (default: %(default)s)')

--listが引数なしで渡されたかどうかを知りたい場合は、const引数を削除し、args.listNoneであるかどうかを確認します。

39
Francisco Couzo