2011-12-07 5 views
5

내 응용 프로그램은 특수 파일 비교 유틸리티이며 하나의 파일 만 비교하는 것은 이해가되지 않으므로 nargs='+'은 적합하지 않습니다.파이썬 2.7에서 argparse 할 수 있습니까? 최소한 두 개의 인수가 필요합니다.

nargs=N은 최대 인수가 N 인 경우를 제외하고는 두 개 이상인 경우 무제한 인수를 허용해야합니다.

+0

는 또한 http://stackoverflow.com/quest를 보라 ions/4194948/python-argparse-is-a-way-to-a-range-in-nargs가 있습니다. 따라서 도움말 텍스트를 어지럽히 지 않고 (또는 어지럽 혀지지 않고도) 더 많은 유연성을 누릴 수 있습니다. – Evert

답변

5

당신은 같은 것을 할 수 없습니다 : 나는 -h 이것을 실행하면

import argparse 

parser = argparse.ArgumentParser(description = "Compare files") 
parser.add_argument('first', help="the first file") 
parser.add_argument('other', nargs='+', help="the other files") 

args = parser.parse_args() 
print args 

내가 얻을 :

usage: script.py [-h] first other [other ...] 

Compare files 

positional arguments: 
    first  the first file 
    other  the other files 

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

나는 단지 하나 개의 인수와 함께 실행하면 작동하지 않습니다 :

usage: script.py [-h] first other [other ...] 
script.py: error: too few arguments 

하지만 두 개 이상의 인수가 좋습니다. 세 가지 인자로 다음을 출력합니다 :

Namespace(first='one', other=['two', 'three']) 
17

nargs가 '2+'와 같은 것을 지원하지 않기 때문에 짧은 대답은 할 수 없습니다.

parser = argparse.ArgumentParser(usage='%(prog)s [-h] file file [file ...]') 
parser.add_argument('file1', nargs=1, metavar='file') 
parser.add_argument('file2', nargs='+', metavar='file', help=argparse.SUPPRESS) 
namespace = parser.parse_args() 
namespace.file = namespace.file1 + namespace.file2 

당신이 필요로하는 트릭은 다음과 같습니다 :

긴 대답은이 같은 사용 무언가가 있음을 해결할 수있다

  • 사용 usage 당신이 파서 사용 문자열을 소유하고 제공하기 위해
  • metavar을 사용하여 도움말 문자열에 다른 이름의 인수를 표시하십시오.
  • 를 사용하십시오. (10)는 변수 중 하나에 대한 도움말을 표시 피하기 위해 단지 파서가

위의 예제는 다음과 같은 도움말 문자열 생산 반환하는 Namespace 객체에 새로운 속성을 추가

  • 병합 두 개의 서로 다른 변수 :

    usage: test.py [-h] file file [file ...] 
    
    positional arguments: 
        file 
    
    optional arguments: 
        -h, --help show this help message and exit 
    

    미만이 개 인수가 전달 될 때 여전히 실패합니다

    $ python test.py arg 
    usage: test.py [-h] file file [file ...] 
    test.py: error: too few arguments 
    
  • 관련 문제