Python 2.7의 Argparse는 최소한 두 개의 인수를 요구하도록 들려야합니까?

StackOverflow https://stackoverflow.com/questions/8411218

  •  29-10-2019
  •  | 
  •  

문제

My Application은 특수한 파일 비교 유틸리티이며 분명히 하나의 파일 만 비교하는 것이 의미가 없으므로 nargs='+'가 적절하지 않습니다.

nargs=N는 최대한 N 인수를 제외하고 만 적어도 두 가지가있는 한 무한한 수의 인수를 수락해야합니다.

도움이 되었습니까?

해결책

짧은 대답은 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를 사용하여 도움말 문자열 에 다른 이름이있는 인수를 표시합니다.
  • 변수 에 대한 도움말을 표시하지 않도록 SUPPRESS를 사용하십시오.
  • 병합 파서가 를 반환하는 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
    
    .

다른 팁

다음과 같이 할 수 없습니까? 라코 디스

-h로 실행하면 다음과 같은 결과가 나타납니다. 라코 디스

하나의 인수로 실행하면 작동하지 않습니다. 라코 디스

하지만 둘 이상의 주장은 괜찮습니다.세 가지 인수로 다음을 인쇄합니다. 라코 디스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top