parser.parse_known_args()
메서드 를 사용 하고있는 경우 필수 인수로 --lport
및 --rport
인수 를 추가하는 것은 어떻습니까 --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
두 번째로 나머지 인수를 구문 분석하는 동안 첫 번째 구문 분석 후 생성 된 . 이렇게하면 결국 모든 파싱이 완료된 후 모든 옵션이 포함 된 단일 네임 스페이스를 갖게됩니다.
단점 :
--prox
이없는 경우 다른 두 종속 옵션이 네임 스페이스에 없습니다. 사용 사례를 기반으로하지만 --prox
존재하지 않는 경우 다른 옵션에 어떤 일이 발생하는지는 관련이 없습니다.
- 파서가 전체 구조를 모르기 때문에 사용 메시지를 수정해야합니다.
--lport
및 --rport
도움말 메시지에 표시되지 않습니다