필수 하위 구문 분석기가있는 Argparse
저는 Python 3.4를 사용 argparse
하고 있으며 하위 파서와 함께 사용하려고합니다 . 위치 인수를 제공하지 않는 경우 (하위 파서 / 서브 프로그램을 표시하기 위해) Python 2.x의 동작과 유사한 동작을 원합니다. 유용한 오류 메시지가 표시됩니다. 즉, python2
다음과 같은 오류 메시지가 표시됩니다.
$ python2 subparser_test.py
usage: subparser_test.py [-h] {foo} ...
subparser_test.py: error: too few arguments
https://stackoverflow.com/a/22994500/3061818 에서 required
제안한대로 속성을 설정하고 있지만 Python 3.4.0에서 오류가 발생합니다 .-전체 추적 :TypeError: sequence item 0: expected str instance, NoneType found
$ python3 subparser_test.py
Traceback (most recent call last):
File "subparser_test.py", line 17, in <module>
args = parser.parse_args()
File "/usr/local/Cellar/python3/3.4.0/Frameworks/Python.framework/Versions/3.4/lib/python3.4/argparse.py", line 1717, in parse_args
args, argv = self.parse_known_args(args, namespace)
File "/usr/local/Cellar/python3/3.4.0/Frameworks/Python.framework/Versions/3.4/lib/python3.4/argparse.py", line 1749, in parse_known_args
namespace, args = self._parse_known_args(args, namespace)
File "/usr/local/Cellar/python3/3.4.0/Frameworks/Python.framework/Versions/3.4/lib/python3.4/argparse.py", line 1984, in _parse_known_args
', '.join(required_actions))
TypeError: sequence item 0: expected str instance, NoneType found
이것은 내 프로그램 subparser_test.py
입니다 -https : //docs.python.org/3.2/library/argparse.html#sub-commands :
import argparse
# sub-command functions
def foo(args):
print('"foo()" called')
# create the top-level parser
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
subparsers.required = True
# create the parser for the "foo" command
parser_foo = subparsers.add_parser('foo')
parser_foo.set_defaults(func=foo)
args = parser.parse_args()
args.func(args)
관련 질문 : 이 argparse 코드가 Python 2와 3간에 다르게 작동하는 이유는 무엇입니까?
당신 subparsers
은 dest
.
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='cmd')
subparsers.required = True
지금:
1909:~/mypy$ argdev/python3 stack23349349.py
usage: stack23349349.py [-h] {foo} ...
stack23349349.py: error: the following arguments are required: cmd
이 '누락 된 인수'오류 메시지를 발행하려면 코드에서 해당 인수에 이름을 지정해야합니다. 위치 인수 (예 : 하위 구문 분석)의 경우 해당 이름은 기본적으로 'dest'입니다. 연결된 SO 답변에 이에 대한 (사소한) 메모가 있습니다.
argparse
지난 파이썬 릴리스에서 몇 안되는 '패치'중 하나가 '필수'인수를 테스트하는 방법을 변경했습니다. 불행히도 하위 파서와 관련하여이 버그가 발생했습니다. 이 문제는 다음 릴리스에서 수정해야합니다 (빠르지 않은 경우).
최신 정보
Py2에서이 선택적 하위 파서 동작을 원하는 경우 가장 좋은 옵션은 다음에 설명 된대로 2 단계 파서를 사용하는 것 같습니다.
Python 2.7에서 Argparse 모듈을 사용하여 기본 하위 구문 분석기를 설정하는 방법
관련 버그 / 문제에 최근 활동이 있습니다.
https://bugs.python.org/issue9253
update
A fix to this is in the works: https://github.com/python/cpython/pull/3027
ReferenceURL : https://stackoverflow.com/questions/23349349/argparse-with-required-subparser
'programing' 카테고리의 다른 글
연도와 연도의 차이점은 무엇입니까? (0) | 2021.01.15 |
---|---|
(GitHub) Markdown에서 이미지 주위에 텍스트 흐름 (0) | 2021.01.14 |
gulp는 모든 CSS 파일을 단일 파일로 축소합니다. (0) | 2021.01.14 |
Vim은 ctag를 자동 생성합니다. (0) | 2021.01.14 |
C # Decimal 데이터 형식 성능 (0) | 2021.01.14 |