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 전에 subparser 내 위치 arg. 나는 원래 파서를 자식 하위 파서의 부모로 전달할 수 있다고 읽었지만 문제를 해결하지는 못합니다. 나는 add_help = False를 추가하고 conflict_handler = 'resolve'를 시도했을 때 초기 파서 선언에 시도했다. 아무도 이것에 올바른 방향으로 나를 가리킬 수 있습니까?nargs = '?'를 사용하는 argparse 옵션 arg before 하위 인수의 위치 arg
usage: subparser.py [-h] [--optional [OPTIONAL]] {subparser} ...
test.py: error: too few arguments
subparser
가 먹고 두 번째 예에서 OPTIONAL
으로 사용지고 : subparser
이되지 않는 옵션 때문에
.test.py --optional
:
감사합니다,
왜 '--optional'을 서브 파서의 부모로 정의해도 문제가 해결되지 않습니까? 어쨌든'subparser'를 호출해야합니다. 그래서'- optional subparser POS' 또는'subparser POS -optional'이라면 어떤 차이가 있습니까? 나는 그것을 "버그"라고 부르기를 주저합니다. 그러나 문서를 읽거나 놀아 보면 내 기대에 어긋납니다 :) 그래도 주위를 해결할 수 있다면 ... –
'subparser POS - optional' doesn ' 이 코드로 작업하십시오. – jgritty