2011-03-10 3 views
86

argparse을 사용하여 스크립트를 만들었습니다.argparse module 인수없이 옵션을 추가하는 방법은 무엇입니까?

스크립트는 옵션으로 구성 파일 이름을 취할 필요가있다, 그들은 완전히 스크립트를 진행하거나 단지를 시뮬레이션해야하는지 여부를 사용자가 지정할 수 있습니다.

인수가 전달되는 : ./script -f config_file -s 또는 ./script -f config_file을.

그것은 -f CONFIG_FILE 부분에 대한 확인하지만 그것은 optionnal하고있는 다음해서는 안 -s의 인수 나에게 묻는 유지합니다. 다음 오류로

parser = argparse.ArgumentParser() 
parser.add_argument('-f', '--file') 
#parser.add_argument('-s', '--simulate', nargs = '0') 
args = parser.parse_args() 
if args.file: 
    config_file = args.file 
if args.set_in_prod: 
     simulate = True 
else: 
    pass 

:

나는 이것을 시도

File "/usr/local/lib/python2.6/dist-packages/argparse.py", line 2169, in _get_nargs_pattern 
nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs) 
TypeError: can't multiply sequence by non-int of type 'str' 

과 같은 errror '' 대신 0와.

답변

125

action='store_true' 사용 @Felix Kling suggested로 :

>>> from argparse import ArgumentParser 
>>> p = ArgumentParser() 
>>> _ = p.add_argument('-f', '--foo', action='store_true') 
>>> args = p.parse_args() 
>>> args.foo 
False 
>>> args = p.parse_args(['-f']) 
>>> args.foo 
True 
+0

고마움 펠릭스 클링 – philippe

58

가치가없는 옵션을 만들려면 'store_const', 'store_true' 또는 'store_false'으로 설정하십시오.

예 :

parser.add_argument('-s', '--simulate', action='store_true') 
+0

안녕하세요, 답변 주셔서 감사합니다. '- foo에', ' _StoreTrueAction (option_strings = [- ('갑 '-f'액션 = 'store_true') >>> parser.add_argument 다음 문서에서 설명한 바와 같이 I 는 시도 -f '], 이명 령 ='foo는 ' nargs = 0, CONST = 사실, 기본 = 거짓, 유형 = 없음, 선택 = 없음, 도움 = 없음, metavar = 없음) >>> 파서. 경우 parse_args() 네임 스페이스 (foo는 = 거짓) >>> 인쇄 args.foo 역 추적 (가장 최근 통화 최종) : 파일 "", 줄 1에서 AttributeError는 '네임 스페이스'개체가 어떤 속성 'foo는' >>>' 이 작동하지 않는 것이 없다; I 할당 후 값을 검색하는 방법을 모른다. 도와 주셔서 감사합니다. – philippe

+0

@philippe은 : 당신은 args' http://stackoverflow.com/questions/5262702/argparse-module-how-to-add-option-without-any'에'parser.parse_args()'반환 값을 결합하는 것을 잊었다했습니다 -argument/5271692 # 5271692 – jfs

+0

@philippe :'args = parser.parse_args()'이미 코드에있는대로. 주석 처리 된 행을 대체하기 만하면'args.simulate'로 값에 접근 할 수 있습니다. –

관련 문제