당신은 당신이 원하는 어느 방식으로 인수를 형식으로 포맷터 클래스를 만들 수 있습니다 작동하는 것 같다. 완전히 똑바로 진행할 수는 없지만 다음 출력을 생성하는 예제가 있습니다. (명령 이름 집합에 대해 metavar를 한 번만 표시하기를 원하는 경우 @mgilson이 올바른 것으로 가정합니다 ... 그렇지 않으면 실제 metavar='value'
을 지정하면됩니다. 정확하게 그 텍스트를 표시).
# without metavar specified:
-c, --chunksize CHUNKSIZE
chunk size in bits
# with metavar specified:
-c, --chunksize some_metavar
chunk size in bits
그리고 클래스의 코드와 재생이 개 출력 :
이
import argparse
# 2.7-3.2
class SingleMetavarHelpFormatter(argparse.HelpFormatter):
def _format_action_invocation(self, action):
if not action.option_strings:
metavar, = self._metavar_formatter(action, action.dest)(1)
return metavar
else:
parts = []
# if the Optional doesn't take a value, format is:
# -s, --long
if action.nargs == 0:
parts.extend(action.option_strings)
# if the Optional takes a value, format is:
# -s ARGS, --long ARGS
else:
default = action.dest.upper()
args_string = self._format_args(action, default)
## THIS IS THE PART REPLACED
#~ for option_string in action.option_strings:
#~ parts.append('%s %s' % (option_string, args_string)) ### this is change
## /SECTION REPLACED
## NEW CODE:
parts.extend(action.option_strings)
parts[-1] += ' %s' % args_string
## /NEW CODE
return ', '.join(parts)
parser = argparse.ArgumentParser(
prog='PROG',
formatter_class=SingleMetavarHelpFormatter
)
parser.add_argument('-c', '--chunksize', type=int, help='no metavar specified')
parser.add_argument('-w', '--with_metavar', type=int, help='metavar specified', metavar='some_metavar')
parser.print_help()
편집 : 이 전혀 metavar을 표시하지하려면, 당신은 통과 할 수 있습니다 메타 바에 빈 문자열 :
parser.add_argument('-e', '--with_empty_metavar', type=int, help='empty metavar specified', metavar='')
원래 클래스와 새로운 클래스 간의 차이점은 짧은 명령 구문 뒤에 여분의 공백 문자가 부족하다는 것입니다.
#usage: PROG [-h] [-c CHUNKSIZE] [-w some_metavar] [-e]
#
#optional arguments:
# -h, --help show this help message and exit
# -c CHUNKSIZE, --chunksize CHUNKSIZE
# no metavar specified
# -w some_metavar, --with_metavar some_metavar
# metavar specified
# -e, --with_empty_metavar
# empty metavar specified
나는'argparse.SUPPRESS' 트릭을 할 수도 있지만, 분명히하지 ... – mgilson
가 원하는 출력은 무엇이라고 생각? '-c CHUNKSIZE, --chunkesize CHUNKSIZE' 대신'-c chunksize, --chunksize chunksize'를 사용합니까? 그러면'metavar = ('chunksize')가 그것을 할 것입니다. 그 논쟁에 대한 도움이 전혀 없습니까? 'help = argparse.SUPPRESS' –
무엇이 가치있는 일인지 생각해 봅시다. 기본 동작이 더 좋다고 생각합니다. 어떤 옵션이 인수를 사용하는지 (그리고 몇 개가 더 많은지) 더 분명합니다. 물론, 나는이 프로그램을 쓰지 않을 것이므로, 여기에있는 나의 의견은 중요하지 않을 수도있다. (그리고 그것은 괜찮은 것이다.) 나는 그 문제에 대한 나의 감정을 표현하고있다. – mgilson