argparse은 그룹이나 파서를 자체 네임 스페이스로 구문 분석 할 수있는 기본 제공 기능을 제공합니까? 나는 어딘가에서 선택권을 놓치고 있어야하는 것처럼 느낀다.중첩 네임 스페이스가있는 argparse 하위 명령
편집 :이 예는 내 목표를 달성하는 파서를 구성하는 일을해야 정확히 아마 아니지만, 그것은 내가 지금까지 밖으로 일 것이었다. 내 특정 목표는 네임 스페이스 필드로 구문 분석되는 옵션 그룹을 서브 파서에 제공 할 수있게하는 것입니다. 부모님과 함께 가진 아이디어는 단순히이 같은 목적으로 공통 옵션을 사용하는 것이 었습니다.
예 :
$ python test.py command_a -foo bar -filter1 val
Namespace(bar=None, common=None, filter1='val', filter2=None, foo='bar')
하지만 난 정말 후 나는 무엇을 :의 다음
Namespace(bar=None, common=None, foo='bar',
filter=Namespace(filter1='val', filter2=None))
그리고 더 많은 그룹이 내가 분명히 무엇을 얻을
import argparse
# Main parser
main_parser = argparse.ArgumentParser()
main_parser.add_argument("-common")
# filter parser
filter_parser = argparse.ArgumentParser(add_help=False)
filter_parser.add_argument("-filter1")
filter_parser.add_argument("-filter2")
# sub commands
subparsers = main_parser.add_subparsers(help='sub-command help')
parser_a = subparsers.add_parser('command_a', help="command_a help", parents=[filter_parser])
parser_a.add_argument("-foo")
parser_a.add_argument("-bar")
parser_b = subparsers.add_parser('command_b', help="command_b help", parents=[filter_parser])
parser_b.add_argument("-biz")
parser_b.add_argument("-baz")
# parse
namespace = main_parser.parse_args()
print namespace
이미 이름 공간에 파싱 된 옵션 :
Namespace(common=None,
foo='bar', bar=None,
filter=Namespace(filter1='val', filter2=None),
anotherGroup=Namespace(bazers='val'),
anotherGroup2=Namespace(fooers='val'),
)
나는 related question here을 찾았지만 맞춤 구문 분석과 관련이 있으며 정말로 특정한 상황만을 다루는 것으로 보입니다.
특정 그룹을 네임 스페이스 필드로 구문 분석하도록 argparse에 지시 할 수있는 옵션이 있습니까?
: (니모닉 :
--mod1-...
는 "MOD1", 등의 옵션이 있습니다). 여러분이 작성한 것처럼'filter1'과'filter2'는 최상위 파서에 있고'filter'라는 이름의 자식 파서는 아닙니다. 어떻게 argparse 당신이 각 하위 파서의 자식으로 행동하기를 원한다는 것을 알 수 있습니까? – abarnert@abarnert : 질문에 따라 예제를 다시 포맷해야합니다. 왜냐하면 당신이 지적한 것처럼 실제로 내가 함께 모은 구조는 적절하지 않기 때문입니다. 내 목표는 실제로 서브 그룹에 옵션 그룹을 적용하고 네임 스페이스로 구문 분석하도록하는 것입니다. 그들이 공통적 일 수 있다면 좋을 것입니다. 그래서 부모 구조를 사용해 보았습니다. – jdi
그래서'pip','git' 등과 같이 최상위 글로벌 옵션과 각 하위 명령에 고유 한 옵션 외에도 여러 하위 명령 (예 : '--verbose','--upgrade','--user' 옵션을 각각'pip'에 추가), 옵션 그룹을 암시 적으로 만드는 대신에 직접 공유를 표현할 수 있어야합니다 (옵션 그룹을 여러 개의 서브 파서에 복사) ? – abarnert