2017-11-10 1 views
0

내가 실행하려고하는 커맨드 라인 스크립트는 값이 없으면 기본값을 네임 스페이스에 삽입하거나 제공된 인수를있는 그대로 가져옵니다. ('- 병합을'= 병합)사용자 정의 액션을 추가하기 위해 argparse.Action을 서브 클래스 화하는 방법은 무엇입니까?

네임 스페이스 :이처럼 보이는 인수 파서 네임 스페이스 초래

myscript.py

--merge :

그래서 나는이 작업을 수행 할 수 내가 전화하면 그렇지

,

myscript.py

네임 스페이스 (= 'DONTMERGE을'병합) 내가 여기에 지정된대로 나는 argparse.Action 클래스의 전화를 사용자 정의 작업을 수행 할 수 방법을 하위 클래스 필요가 있다고 생각

:네임 스페이스는 다음과 같이한다 https://pymotw.com/2/argparse/을하지만 어떻게하는지 알아낼 수 없습니다. 내가 예상 결과를받지 못했습니다, 불행하게도

class CustomAction(argparse.Action): 
    def __call__(self, parser, namespace, values, option_string=None): 
     if isinstance(self.values, None): 
      self.values = 'NOMERGE' 
     else: 
      self.values = '--nomerge' 
     setattr(namespace, self.dest, values) 

:

나는 이런 식으로 뭔가 트릭을 할 것이라고 생각했다.

+1

왜 다만'store_const' 인수를 사용하십시오? – khelwood

+0

나는 store_const를 시도했는데 문제는 myscript와 같은 추가 인수를 제공해야한다는 것입니다. myscript --merge someotherarg 명령 줄을 통해 제공된 인수는 다른 스크립트로 파이프되어 다른 곳에서는 동작을 변경할 수 없습니다. –

+0

링크 된 기사를 보면'setattr' 호출이 한 단계 더 들여 쓰기되어야합니다. – FamousJameous

답변

3

보통 store_const 인수가 필요하다고 생각합니다. 당신이 --merge와 스크립트를 호출하는 경우

parser.add_argument('--merge', action='store_const', const='MERGE', default='DONTMERGE') 

merge 인수 (const로서 상기 지정된) 값 MERGE 걸립니다. 그렇지 않으면 인수는 DONTMERGE 값을 갖습니다 (위의 값은 default입니다).

https://docs.python.org/2/library/argparse.html#action

+0

감사합니다. 나는 디폴트 값을 저장할 가능성을 놓쳤다. 트릭을 완료 한 것처럼 보입니다. 서브 클래 싱에서이를 수행하는 방법에 대한 제안 사항이 있으시면이 포인터에 대해 정말로 고맙게 생각합니다. –

관련 문제