2016-10-29 10 views
7

明示的なリストがあるPython 3アプリケーションでargparseを使用しようとしていますが、指定されていない場合はデフォルトが使用されています。python 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 

私はここに何かを逃していますかまたは、選択肢を指定してデフォルトを設定することはできませんか?

+0

--list'全くとデフォルトがされる '渡してはいけません中古。 – ShadowRanger

+0

私は参照してください...それはあなたが[サブコマンド](https://docs.python.org/3/)のように聞こえます。 – MVanOrder

+0

library/argparse.html#sub-commands)、スイッチではありません。 'nargs = '?'であっても、' --list'とデフォルトセットがあるときは何も渡さないという違いは分かりません。 – ShadowRanger

答えて

14

add_argumentnargsconst引数を渡す:

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であるかどうかを確認します。

2

ありがとう@ShadowRanger。 は、私が必要としているのは、nargsconstです。以下の作品:一人で

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 

listオプション:パラメータを使用して

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

リストオプション:

$ python3 ./myapp.py list servers 
{'list_type': 'servers'} 
関連する問題