Argparse:'--help'에 기본값을 포함하는 방법?
다음과 같은 argparse 스니펫이 있다고 가정합니다.
diags.cmdln_parser.add_argument( '--scan-time',
action = 'store',
nargs = '?',
type = int,
default = 5,
help = "Wait SCAN-TIME seconds between status checks.")
현재의,--help
반환:
usage: connection_check.py [-h]
[--version] [--scan-time [SCAN_TIME]]
Test the reliability/uptime of a connection.
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
저는 다음과 같은 것을 원합니다.
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
(Default = 5)
도움말 포메터 코드를 훔쳐보면 제한된 옵션이 나타납니다.다른 방법이 있을까요?argparse
기본값을 인쇄하다--scan-time
비슷한 방식으로, 아니면 그냥 분류해야 할까요?help
포맷?
포메터를 사용합니다.
parser = argparse.ArgumentParser(
# ... other options ...
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
문서를 인용하려면:
다른 포메터 클래스는 사용할 수 있습니다.
ArgumentDefaultsHelpFormatter
는 각 인수의 기본값에 대한 정보를 추가합니다.
이는 도움말텍스트가 정의되어 있는 인수에만 적용됩니다.help
인수 값. 기본값에 대한 정보를 추가하는 도움말메시지는 없습니다.
그러면 스캔 시간 옵션의 정확한 출력은 다음과 같습니다.
--scan-time [SCAN_TIME]
Wait SCAN-TIME seconds between status checks.
(default: 5)
더하다'%(default)s'
표시되는 내용을 제어하기 위해 도움말 매개 변수를 선택합니다.
parser.add_argument("--type", default="toto", choices=["toto","titi"],
help = "type (default: %(default)s)")
주의:
- 그렇다.
%
+ 괄호 안의 기본값 + 형식 문자(컬리 괄호와 혼동하지 말 것){default}
에서 찾을 수 있습니다.format
또는 f-string) - 마지막으로 유형 표현에 "지정자 문자"를 추가하는 것을 잊지 마십시오(예:
s
스트링의 경우,d
정수의 경우,f
플로트 등) - 일반적인 "printf" 형식 지정자(플로트 숫자, 선행 0 등)를 추가할 수도 있습니다.
자세한 내용은 printf 문서를 참조하십시오.
래퍼 클래스
이것은 디폴트 표시와 다음과 같은 다른 포맷을 모두 사용할 수 있는 지금까지 발견된 방법 중 가장 신뢰성이 높고 DRY 접근법입니다.argparse.RawTextHelpFormatter
동시에:
#!/usr/bin/env python3
import argparse
class ArgumentParserWithDefaults(argparse.ArgumentParser):
def add_argument(self, *args, help=None, default=None, **kwargs):
if help is not None:
kwargs['help'] = help
if default is not None and args[0] != '-h':
kwargs['default'] = default
if help is not None:
kwargs['help'] += ' Default: {}'.format(default)
super().add_argument(*args, **kwargs)
parser = ArgumentParserWithDefaults(
formatter_class=argparse.RawTextHelpFormatter
)
parser.add_argument('-a', default=13, help='''my help
for a''')
parser.add_argument('-b', default=42, help='''my help
for b''')
parser.add_argument('--no-default', help='''my help
for no-default''')
parser.add_argument('--no-help', default=101)
parser.print_help()
print()
print(parser.parse_args())
출력:
usage: main.py [-h] [-a A] [-b B] [--no-default NO_DEFAULT]
[--no-help NO_HELP]
optional arguments:
-h, --help show this help message and exit
-a A my help
for a Default: 13
-b B my help
for b Default: 42
--no-default NO_DEFAULT
my help
for no-default
--no-help NO_HELP
Namespace(a=13, b=42, no_default=None, no_help=101)
ArgumentDefaultsHelpFormatter
+RawTextHelpFormatter
다중 상속
다중 상속은 기능하지만 퍼블릭 API는 아닌 것 같습니다.
#!/usr/bin/env python3
import argparse
class RawTextArgumentDefaultsHelpFormatter(
argparse.ArgumentDefaultsHelpFormatter,
argparse.RawTextHelpFormatter
):
pass
parser = argparse.ArgumentParser(
formatter_class=RawTextArgumentDefaultsHelpFormatter
)
parser.add_argument('-a', default=13, help='''my help
for a''')
parser.add_argument('-b', default=42, help='''my help
for b''')
parser.print_help()
출력:
usage: a.py [-h] [-a A] [-b B]
optional arguments:
-h, --help show this help message and exit
-a A my help
for a (default: 13)
-b B my help
for b (default: 42)
https://github.com/python/cpython/blob/v3.6.5/Lib/argparse.py#L648에서 알 수 있듯이 다음과 같은 정보가 제공되고 있습니다.
RawTextHelpFormatter
용구_split_lines
ArgumentDefaultsHelpFormatter
용구_get_help_string
잘 맞힐 수 있을 것 같아요.
단, 이것은 퍼블릭 API가 아닌 것 같습니다.또한 이 API의 메서드도formatter_class
그래서 현재 공개 API 방법은 없는 것 같습니다. argparse
docstring :
이 모듈의 다른 모든 클래스는 구현 세부사항으로 간주됩니다.(또한 HelpFormatter 및 RawDescription에 주의해 주십시오.HelpFormatter는 오브젝트명으로만 퍼블릭으로 간주됩니다.포맷터 오브젝트의 API는 아직 구현 상세로 간주됩니다.
다음 항목도 참조하십시오.argparse 도움말 메시지 사용자 지정
Python 3.6.5에서 테스트 완료.
많은 경우, 다음과 같은 기능을 자동으로 포함시킬 수 있습니다.default
help 출력의 값이지만 명시적으로 지정된 값만(를 사용하여)default=..
이미 설명한 방법에는 이 점에서 몇 가지 단점이 있습니다.
ArgumentDefaultsHelpFormatter
메서드 출력(default: None)
지정되지 않은 에 대해, 및 「」를 참조해 .(default: False)
contraction ('contraction')의 경우action='store_true'
이렇게 하면 도움말 출력이 복잡해집니다. , 「 」default=argparse.SUPPRESS
이러한 인수마다 수동으로 추가해야 합니다.'%(default)s'
메서드는 모든 인수의 '에 수동으로 추가해야 합니다.help
인쇄하고 싶은 스트링입니다.
두 방법 모두 "올바른" 기본값만 인쇄하려면 수동 작업이 필요합니다.이것을 으로 하는 중 는 ''을 하는 입니다.ArgumentDefaultsHelpFormatter
None
§False
★★★★★★★★★★★★★★★★★★:
class ExplicitDefaultsHelpFormatter(argparse.ArgumentDefaultsHelpFormatter):
def _get_help_string(self, action):
if action.default in (None, False):
return action.help
return super()._get_help_string(action)
ArgumentDefaultsHelpFormatter
:
parser = argparse.ArgumentParser(
formatter_class=ExplicitDefaultsHelpFormatter
)
명시적으로 설정된 인쇄만 됩니다.default
값을 지정합니다.
가 명시적으로 「」로되어 있는 경우: 「」는 「」로 설정되어 .None
★★★★★★★★★★★★★★★★★」False
이. , 를 추가합니다.추가%(default)s
으로 묶다help
이 인수에 대해서는, 헬프 출력에 표시할 필요가 있습니다.
언급URL : https://stackoverflow.com/questions/12151306/argparse-way-to-include-default-values-in-help
'programing' 카테고리의 다른 글
MySQL 데이터베이스 이름 변경 (0) | 2022.10.03 |
---|---|
경고: mysql_connect(): [2002]에 이러한 파일 또는 디렉토리가 없습니다(unix:///tmp/mysql.sock 경유로 접속하려고 합니다). (0) | 2022.10.03 |
MySQL 5.0 인덱스 - 고유 대 고유하지 않음 (0) | 2022.10.03 |
Symfony 2에 JSON 개체 게시 (0) | 2022.10.03 |
테이블의 기본 키를 얻는 방법 (0) | 2022.10.03 |