Python 2.7의 Argparse는 최소한 두 개의 인수를 요구하도록 들려야합니까?
문제
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
로 실행하면 다음과 같은 결과가 나타납니다.
라코 디스
하나의 인수로 실행하면 작동하지 않습니다. 라코 디스
하지만 둘 이상의 주장은 괜찮습니다.세 가지 인수로 다음을 인쇄합니다. 라코 디스
제휴하지 않습니다 StackOverflow