Optparse, 이전 버전은 인식 할 수없는 모든 인수를 무시하고 계속 수행합니다. 대부분의 상황에서 이것은 이상적이지 않으며 argparse로 변경되었습니다. 그러나 인식 할 수없는 인수를 무시하고 지정한 인수를 구문 분석하려는 상황이 몇 가지 있습니다.
예를 들면 다음과 같습니다.
parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest="foo")
parser.parse_args()
$python myscript.py --foo 1 --bar 2
error: unrecognized arguments: --bar
어쨌든 이것을 덮어 쓸 수 있습니까?
답변
바꾸다
args = parser.parse_args()
와
args, unknown = parser.parse_known_args()
예를 들어
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
args, unknown = parser.parse_known_args(['--foo', 'BAR', 'spam'])
print(args)
# Namespace(foo='BAR')
print(unknown)
# ['spam']
답변
나머지 부분 parser.add_argument('args', nargs=argparse.REMAINDER)
을 사용하려면 새 인수에 넣을 수 있습니다 .
답변
실제로 argparse는 여전히 “무시” _unrecognized_args
합니다. 이러한 “인식되지 않은”인수 가 기본 접두사 를 사용하지 않는 한 파서로부터 불만을 듣지 않습니다.
parse.parse_args()
다음 인수로 프로그램을 실행하려면 @anutbu의 구성을 사용하지만 standard를 사용하십시오.
$ program --foo BAR a b +cd e
이 네임 스페이스 데이터 수집을 작업 할 것입니다.
Namespace(_unrecognized_args=['a', 'b', '+cd', 'e'], foo='BAR')
기본 접두사를 -
무시하려면 ArgumentParser를 변경하고 +
대신 “인식 된”인수에 a를 사용하기로 결정 합니다.
parser = argparse.ArgumentParser(prefix_chars='+')
parser.add_argument('+cd')
동일한 명령으로
Namespace(_unrecognized_args=['--foo', 'BAR', 'a', 'b'], cd='e')
파이프에 넣고 담배를 피우십시오 =)
조이!