2014-01-17 1 views
14

python argparse에서 제공하는 기본 사용법 메시지 대신 사용자 정의 'usage'함수를 추가 할 수 있습니까?argparse의 사용자 정의 '사용'기능?

샘플 코드 :

parser = argparse.ArgumentParser(description='Sample argparse py') 
parser.add_argument('-arg_1',type=int, custom_usage_funct('with_some_message')) 
output = parser.parse_args() 

def custom_usage_funct(str): 
    print str 
    print ''' 
     Usage: program.py 
     [-a, Pass argument a] 
     [-b, Pass argument b] 
     [-c, Pass argument c] 
     [-d, Pass argument d] 
     comment 
     more comment 
     ''' 

전달 된 인수가 같은 정수 대신 문자열 값이 다음 오류 메시지와 함께 사용자 지정 사용 함수를 호출해야 프로그램이

"정수 값을 입력하십시오"인 경우 유효한 인수

program.py -arg_1 123 

잘못된 인수

program.py -arg_1 abc 

     Please provide an integer value 
     Usage: program.py 
     [-a, Pass argument a] 
     [-b, Pass argument b] 
     [-c, Pass argument c] 
     [-d, Pass argument d] 
     comment 
     more comment 

답변

7

예, 기본 메시지가 사용 =이 같은 키워드 인수

def msg(name=None):                
    return '''program.py 
     [-a, Pass argument a] 
     [-b, Pass argument b] 
     [-c, Pass argument c] 
     [-d, Pass argument d] 
     comment 
     more comment 
     ''' 

및 사용하여 대체 할 수 있습니다

import argparse 
parser = argparse.ArgumentParser(description='Sample argparse py', usage=msg()) 
parser.add_argument("-arg_1", help='with_some_message') 
parser.print_help() 

위의 출력은 다음과 같이이다

usage: program.py 
     [-a, Pass argument a] 
     [-b, Pass argument b] 
     [-c, Pass argument c] 
     [-d, Pass argument d] 
     comment 
     more comment 


Sample argparse py 

optional arguments: 
    -h, --help show this help message and exit 
    -arg_1 ARG_1 with_some_message 

참고 : 참조 here

Usingaction= 키워드 인수는

>>> class FooAction(argparse.Action): 
...  def __call__(self, parser, namespace, values, option_string=None): 
...   print '%r %r %r' % (namespace, values, option_string) 
...   setattr(namespace, self.dest, values) 
... 
>>> parser = argparse.ArgumentParser() 
>>> parser.add_argument('--foo', action=FooAction) 
>>> parser.add_argument('bar', action=FooAction) 
>>> args = parser.parse_args('1 --foo 2'.split()) 
Namespace(bar=None, foo=None) '1' None 
Namespace(bar='1', foo=None) '2' '--foo' 
>>> args 
Namespace(bar='1', foo='2') 
+1

인수 입력을 기반으로 사용자 지정 함수를 호출 할 수 있습니까? 인수가 정수 값만 기대하고 사용자가 문자열 값을 입력한다고 가정 해보십시오. 그런 다음 사용자 정의 사용 함수는 "인수가 정수 값만 허용합니다"라는 메시지와 함께 호출되어야합니다. – devav2

+1

예'action ='키워드 인수로 할 수 있습니다. 예는 [여기] (http://docs.python.org/2.7/library/argparse.html#action)입니다. 내 편집 된 답변보기 –

+1

msg를 기능시킬 필요가 없습니다. 문자열을 반환하고 사용법 = 문자열을 반환하기 때문에 중간 사람을 잘라낼 수 있습니다. –

2

예, usage 옵션을 사용합니다. 문서에서 :

>>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]') 
>>> parser.add_argument('--foo', nargs='?', help='foo help') 
>>> parser.add_argument('bar', nargs='+', help='bar help') 
>>> parser.print_help() 
usage: PROG [options] 

positional arguments: 
bar   bar help 

optional arguments: 
-h, --help show this help message and exit 
--foo [FOO] foo help 
관련 문제