2012-08-17 3 views
7

저는 파이썬에서 argparse 모듈을 사용하여 명령 행 인터페이스에 입력 된 매개 변수를 구문 분석합니다. 나는 행동이나 metavar 매개 변수를 제거하면Python argparse : metavar and action = store_true

Traceback (most recent call last): 
    File "./scripts/tp4", line 94, in <module> 
    main() 
    File "./scripts/tp4", line 74, in main 
    modloader.loadModules(sub_parsers) 
    File "/usr/lib/python2.6/site-packages/tp4/cli/Moduleloader.py", line 66, in loadModules 
    registered_modules[module_name].setSubparserArgs(module_sub_parser) 
    File "/usr/lib/python2.6/site-packages/tp4/cli/modules/AutotestModule.py", line 135, in setSubparserArgs 
    action='store_true', default=False, required=False) 
    File "/usr/share/tp4/cli/zip/argparse.zip/argparse.py", line 1302, in add_argument 
    TypeError: __init__() got an unexpected keyword argument 'metavar' 

이 작동 :이 오류가

submit_parser.add_argument('-pv','--provision',metavar='PROVISION', dest='PROVISION', 
           help='provision system', 
           action='store_true', default=False, required=False) 

: 나는 subparser 객체에 다음 add_argument 호출을 가지고있다. 왜 둘 다 같이있을 수 없습니까? argparse 문서에는이 제한에 관한 내용이 없습니다 (http://docs.python.org/dev/library/argparse.html). 어떤 도움

+0

python 버전 .... 확인해야 할 중요한 것 .... – avasal

+0

'action'이''store_true'' 인 경우, 기본값은 이미'False'입니다. (그리고 만약 액션 is 'store_false'''가 기본값은''True''입니다). 'optparse'와는 달리 꽤 편리합니다 (두 경우 모두 기본값은 None입니다). – torek

답변

13

metavar는 위치 인수에 대한 의미 (명령 행의 마지막에 파일 이름 생각을)하게 또는 사전에

감사 인수는 자신의 주장을 (--input-files foo.txt bar.txt을 같은)합니다.

인수는 actionstore_true으로 설정했기 때문에 플래그입니다. 인수를 취하지 않습니다 (즉, nargs이 설정되지 않음). 따라서 메타 바를 갖는 것은 이치에 맞지 않습니다. the argparse documentation에서

:

When ArgumentParser generates help messages, it need some way to refer to each expected argument. By default, ArgumentParser objects use the dest value as the “name” of each object. By default, for positional argument actions, the dest value is used directly, and for optional argument actions, the dest value is uppercased. So, a single positional argument with dest='bar' will be referred to as bar. A single optional argument --foo that should be followed by a single command-line argument will be referred to as FOO.

+3

설명해 주셔서 감사합니다. 그러나이 정보는 argparse 문서에서 명시 적이지 않습니다. –

+3

스파 스 파이썬 문서의 경우 필자는 PYMOTW 웹 사이트에서 대답을 얻는다. http://pymotw.com/2/argparse/ – qneill

+2

내가 정말로 원했던 것이'dest ='였을 때 나는'metavar ='를 사용하고 있었다. – aldo

-2

이 @pwc에서 답을 추출하려면, 당신은 dest 대신 metavar 사용해야합니다.