parser.parse_known_args()
メソッドを使用し、存在する場合は必要なargs --lport
としてと--rport
argsを追加するのはどうですか--prox
。
# just add --prox arg now
non_int = argparse.ArgumentParser(description="stackoverflow question",
usage="%(prog)s [-h] [--prox --lport port --rport port]")
non_int.add_argument('--prox', action='store_true',
help='Flag to turn on proxy, requires additional args lport and rport')
opts, rem_args = non_int.parse_known_args()
if opts.prox:
non_int.add_argument('--lport', required=True, type=int, help='Listen Port.')
non_int.add_argument('--rport', required=True, type=int, help='Proxy port.')
# use options and namespace from first parsing
non_int.parse_args(rem_args, namespace = opts)
またopts
、最初の解析後に生成された名前空間を指定し、残りの引数を2回目に解析できることにも注意してください。そうすれば、最終的に、すべての解析が完了した後、すべてのオプションを備えた単一の名前空間ができます。
欠点:
--prox
が存在しない場合、他の2つの依存オプションは名前空間にも存在しません。あなたのユースケースに基づいています--prox
が、存在しない場合、他のオプションに何が起こるかは関係ありません。
- パーサーは完全な構造を知らないため、使用法メッセージを変更する必要があります
--lport
そして、--rport
ヘルプメッセージに表示されません。