2012-11-27 1 views
5

현재 argparse를 사용하여 인수를 구문 분석하고 플래그를 부울 옵션으로 저장하고 있습니다. 그런 다음 어느 플래그가 true로 설정되어 있는지 확인하고 해당 기능을 실행합니다. Argparse는 열리고 인수로 호출 된 함수에 전달 된 입력 파일을 구문 분석합니다.argparse 다른 옵션을 구문 분석 한 후 함수를 호출하십시오.

그래서 :

parser.add_argument('input_data', action='store', help='some help') 
parser.add_argument('outputname', action='store',default=None, help='some help') 
parser.add_argument('--flag','-f', action='store_true', dest='flag', default=False, help='help!') 

나는 플래그 함수가 호출되기 전에 일부 정보를 읽을 수있는 input_data를 열 수 있습니다.

if args.flag == True: 
    array_out = flag(array_read_from_input) 
    if args.outputname == None: 
     name = 'Flag.tif' 

작업의 키워드는 함수를 호출하도록 subclass argparse 수 있습니다 :이 기능은 현재로 구현됩니다.

input_data 옵션을 구문 분석하고 일부 처리를 수행 한 다음 argpse의 작업 매개 변수를 하위 클래스 화하여 각 인수에 대해 중첩 된 if 루프를 사용하지 않고 플래그 함수를 호출 할 수 있습니까?

+0

개체를 'True'또는 'None'으로 비교하지 마십시오. 'is'를 사용하거나 객체의 진리 값을 사용하십시오 (따라서'args.flag : ... '및'args.outputname이 None' 인 경우). 또한 사용자 지정 작업을 올바르게 만들 수 있다는 것을 알고 있습니까? argparse 문서를 읽으십시오. – Bakuriu

+0

@Bakuriu "argparse를 서브 클래스 화하여 action 키워드가 함수를 호출하도록 할 수 있습니다." 문제는 사용자 지정 작업을 만들 수 있는지 여부가 아니라 다른 args를 구문 분석하고 조작 한 후에 해당 작업을 호출 할 수 있는지 여부입니다. – Jzl5325

+0

당신이 * after * 파싱이라고 부르고 싶다면, 질문에'argparse'의 관계가 무엇인지 이해하지 못합니다. 이 모듈은 명령 행을 구문 분석하고 결과적으로 파싱하는 동안 액션을 실행합니다. 또한, 나는 이중 'if'가 무엇이 잘못된지 이해하지 못한다. 참고 사항 : [parser] (http://docs.python.org/dev/library/argparse.html#argumentparser-objects)의 하위 클래스를 사용하고'parse_args '함수를 다시 구현하면 함수가 거기에 호출되지만 여전히 두 개의'if '를 넣어야합니다. – Bakuriu

답변

0

이 중첩하지 않고 플래그 기능을 일부 처리를 수행 input_data 옵션을 구문 분석하고 호출 할 수있는 경우 각 인수, 예., argparse의 행동 매개 변수를 서브 클래스에 의해 루프?

질문에 따라;

class FooAction(argparse.Action): 
    def __call__(self, parser, namespace, values, option_string=None): 
     << some processing of values >> 
     array_out = flag(values) 
     setattr(namespace, self.dest, array_out) 

parser = argparse.ArgumentParser() 
parser.add_argument('input_data', action=FooAction, help='some help')