현재 파이썬의 argparse 모듈은 {1, 2, 3, ... 65535}가 아닌 '1 - 65535'만 출력하려고합니다. 그러나 문서가 어떤 방법을 제공하지 않는 것 같습니다 이. 어떤 제안?파이썬의 argparse 선택 제한 인쇄
3
A
답변
5
formatter_class
option을 설정하여 기본값이 형식화되는 방식을 변경할 수 있습니다.
HelpFormatter class의 하위 클래스를 사용하여 choices
값의 형식을 변경하십시오. 이 클래스는 공식적으로 "구현 세부 사항"이지만 새로운 파이썬 버전으로 많이 바뀔지는 의문입니다.
_metavar_formatter
method는 {1, 2, ..., 65535}
문자열을 포맷하고 하위 클래스는 그것을 무시할 수 :
class RangeChoiceHelpFormatter(HelpFormatter):
def _metavar_formatter(self, action, default_metavar):
if action.metavar is not None:
result = action.metavar
elif action.choices is not None:
result = '{%s .. %s}' % (min(action.choices), max(action.choices])
else:
result = default_metavar
def format(tuple_size):
if isinstance(result, tuple):
return result
else:
return (result,) * tuple_size
return format
또 다른 옵션은 하지 새로운 argument type을 정의하는 대신 같은 넓은 범위의 choices
인수를 사용하고 있습니다.
class IntRange(object):
def __init__(self, start, stop=None):
if stop is None:
start, stop = 0, start
self.start, self.stop = start, stop
def __call__(self, value):
value = int(value)
if value < self.start or value >= self.stop:
raise argparse.ArgumentTypeError('value outside of range')
return value
당신은로 사용할 수 있습니다
이것은 단지 호출되어 문자열이 대상 유형으로 변환 할 수없는 경우 argparse.ArgumentTypeError
, TypeError
또는 ValueError
을 제기 문자열, 또는 달리 변환 된 값을 전달 인수 유형은 다음과 같습니다.
parser.add_argument('foo', type=IntRange(1, 65536))
및 허용되는 값을 나타내는 도움말 메시지를 조정하십시오.