import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
'--optional',
default=None,
const='some-const',
nargs='?',
help='optional')
subparsers = parser.add_subparsers()
subparser = subparsers.add_parser('subparser')
subparser.add_argument(
'positional',
help='positional')
args = parser.parse_args()
print args
./test.py --optional opt subparser positional
Namespace(optional='opt', positional='positional') <-- works as expected
./test.py --optional subparser positional
usage: test.py [-h] [--optional [OPTIONAL]] {subparser} ...
test.py: error: invalid choice: 'positional' (choose from 'subparser') <-- throws an error
Namespace(optional='some-const', positional='positional') <-- would expect to see this
上記は、この問題を実証するための最も簡単なテスト コードです。nargs='?' を使用してオプションの引数が必要です。サブパーサーの位置引数の前にconst 。元のパーサーを親として子サブパーサーに渡すことができると読みましたが、これでは問題は解決しません。add_help=False と conflict_handler='resolve' を最初のパーサー宣言に追加してみました。誰かがこれについて正しい方向に私を向けることができますか?
ありがとう、スコット