2016-09-07 2 views
-1

--arg1 value1 형식의 인수 집합을 파이썬 스크립트에 전달하고 {'arg1': 'value1} 사전에서 검색하고 싶습니다. 이를 달성하기 위해 argparse을 사용하고 싶습니다. parse_known_args 함수는 추가 args를 허용하지만 간단한 목록으로 검색 할 수 있으며 명명되지 않습니다.명명 된 인수를 사용하는 Python parse_known_args

+0

당신은 단순히'add_argument' 메소드를 사용하여 옵션을 정의 할 수 있습니다. 'parse_known_args'는'add_argument'를 통해 정의 된 모든 옵션을 구문 분석하고 나머지 명령 행을 리턴하는 메소드입니다.'parse_args'를 사용하면 나머지 인수가있을 경우 오류가 발생합니다. – Bakuriu

+0

추가 인수는 선험적으로 알 수없는 이름/값이 될 수 있습니다. –

+0

그런 다음'argparse'는 그걸로 무엇을해야하는지 알지 못합니다. 그것은'parse_known_args'의 요점입니다 : ** 당신 **은 나머지 인자들을 수동으로 처리해야합니다. – Bakuriu

답변

2

옵션을 두 개의 인수, 이름 및 값을 사용하고 두 개의 인수를 사용하여 사전을 업데이트하는 사용자 지정 동작을 사용하는 옵션을 정의하는 것이 더 좋습니다.

class OptionAppend(Action): 
    def __call__(self, parser, namespace, values, option_string): 
     d = getattr(namespace, self.dest) 
     name, value = values 
     d[name] = value 

p.add_argument("-o", "--option", nargs=2, action=OptionAppend, default={}) 

그럼 대신 myscript --arg1 value1 --arg2 value2, 당신은 myscript -o arg1 value1 -o arg2value1을 작성하고, args = parser.parse_args() 후, 당신은 args.o == {'arg1': 'value1, 'arg2': 'value2'}있을 것입니다.


이것은 개별적으로 명명 된 변수 집합 대신 관련된 변수 집합을 유지하기 위해 목록이나 사전을 사용하는 것과 다소 비슷합니다.

# Good 
v = [x, y, z] 
v = { 'key1': x, 'key2': y, 'key3': z} 
# Bad 
v1 = x 
v2 = y 
v3 = z 
0

임의의 키/값 쌍 처리 문제는 여러 번 발생했습니다. argparse에는 이에 대한 기본 메커니즘이 없습니다. 간단한 아마와 -

Is it possible to use argparse to capture an arbitrary set of optional arguments? (지난 5 월부터 거의 중복) parse_know_args를 사용하고 자신의 사전이 extras에서 구축하고의

당신의 아이디어는 좋다. 추가 목록을 처리하는 방법은 사용자의 행동 방식 (궁극적으로 '--key', 'value' 쌍)에 따라 달라집니다. 이것은 기본적으로 sys.arv[1:]을 파싱 한 것과 같습니다.

사용자가 --options key1:value1 key2=value2 "key3 value3"과 같은 입력을하면 사용자 정의 작업 클래스에서 해당 쌍을 구문 분석 할 수 있습니다 (예 : 구분 기호 등으로 문자열 분리).

--options "{key1: value1, key2: value2}"과 같은 입력은 type=json.load과 같은 유형의 기능을 가진 JSON 문자열로 처리 할 수 ​​있습니다 (이 부분을 살펴 봐야합니다).

관련 문제