[python] 파이썬 인수는 인식 할 수없는 인수를 무시합니다.

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')

파이프에 넣고 담배를 피우십시오 =)

조이!


답변