2012-01-21 3 views
2

argparse를 사용하여 (3) 정수 인수를 취하여이를 프로그램 본문의 변수로 사용하고 싶습니다. 아래 코드를 실행하면 각 변수가 하나의 요소 목록에 저장됩니다. 이것은 큰 문제는 아니지만 파서를 설정하여 각 값을 간단한 정수 변수에 넣을 수 있습니까?은 위치 번호 인수를 간단한 변수로 저장할 수 있습니까?

import argparse 

def main(): 
    parser = argparse.ArgumentParser(description='three positional integer arguments.') 
    parser.add_argument('picks', type=int, nargs='+', default=10, 
         help='number of selections per execution') 
    parser.add_argument('minchunk', type=int, nargs='+', default=2, 
         help='min chunk size') 
    parser.add_argument('maxchunk', type=int, nargs='+', default=8, 
         help='max chunk size') 

    args = parser.parse_args(['1', '2', '3']) 
    print args 
    return 0 
+0

를 얻을 수 있습니다. 여러 값을 지원하려면 항상 목록을 사용하십시오. – delnan

답변

2

nargs = '+'이 목록에 하나 개 이상의 인수를 수집하는 argparse을 알려줍니다. 당신이이 nargs = '+' 제거하는 경우 :

import argparse 

def main(): 
    parser = argparse.ArgumentParser(
     description = 'three positional integer arguments.') 
    parser.add_argument('picks', type = int, default = 10, nargs = '?', 
         help = 'number of selections per execution') 
    parser.add_argument('minchunk', type = int, default = 2, nargs = '?', 
         help = 'min chunk size') 
    parser.add_argument('maxchunk', type = int, default = 8, nargs = '?', 
         help = 'max chunk size') 

    args = parser.parse_args() 
    print args 

main() 

이 이렇게 할 경우, 당신은 갑자기 통과 얼마나 많은 숫자에 따라 완전히 다르게 얻고 호환되지 않는 유형

Namespace(maxchunk=3, minchunk=2, picks=1) 
+0

고마워, 그 말이 맞아. 유감스럽게도 nargs의 기본값을 사용하면 인수는 선택 사항이 아닙니다. 정확히 3이 제공되지 않으면 오류가 발생합니다 ('인수가 너무 적거나'인식 할 수없는 인수). nargs = '?'를 사용하면 나에게 맞는 옵션 인 것 같다. 존재한다면 값 하나를 소비하고, 그렇지 않으면 기본값을 사용한다. 3 개 이상의 arg가 주어지면 적절한 '알 수없는 arg'오류가 발생합니다. – thermalCat

+0

thermalCat, 의견에 감사드립니다. 'nargs = '?' '를 추가 했으므로 디폴트 값이 적용됩니다. – unutbu

0

이와 비슷한?

(a,b,c) = parser.parse_args(['1','2','3']) 
+0

이렇게 괄호 안의 첫 번째 괄호를 생략 할 수도 있습니다. – Thomas

관련 문제