수색…


소개

정확한 명령 행 인터페이스와 도움말 출력으로 hg 또는 svn 과 같은 부속 명령을 작성하는 여러 가지 방법. 참고 절에 표시된대로 출력하십시오.

구문 분석 명령 줄 인수 는 더 광범위한 인수 구문 분석 항목을 포함합니다.

비고

도움말 메시지에 표시된 명령 행 인터페이스로 hg 또는 svn 과 같은 하위 명령을 작성하는 여러 가지 방법은 다음과 같습니다.

usage: sub <command>

commands:

  status -  show status
  list   -  print list

기본 방법 (라이브러리 없음)

"""
usage: sub <command>

commands:

  status -  show status
  list   -  print list
"""

import sys

def check():
    print("status")
    return 0

if sys.argv[1:] == ['status']:
    sys.exit(check())
elif sys.argv[1:] == ['list']:
    print("list")
else:
    print(__doc__.strip())

인자없는 출력 :

usage: sub <command>

commands:

  status -  show status
  list   -  print list

장점 :

  • deps 없음
  • 모두가 그걸 읽을 수 있어야합니다.
  • 도움말 서식을 완벽하게 제어

argparse (기본 도움말 포맷터)

import argparse
import sys

def check():
    print("status")
    return 0

parser = argparse.ArgumentParser(prog="sub", add_help=False)
subparser = parser.add_subparsers(dest="cmd")

subparser.add_parser('status', help='show status')
subparser.add_parser('list', help='print list')

# hack to show help when no arguments supplied
if len(sys.argv) == 1:
    parser.print_help()
    sys.exit(0)

args = parser.parse_args()

if args.cmd == 'list':
    print('list')
elif args.cmd == 'status':
    sys.exit(check())

인자없는 출력 :

usage: sub {status,list} ...

positional arguments:
  {status,list}
    status       show status
    list         print list

장점 :

  • 파이썬과 함께 제공됩니다.
  • 옵션 구문 분석이 포함됩니다.

argparse (사용자 정의 도움말 포맷터)

고정 된 도움말 출력의 http://www.riptutorial.com/python/example/25282/argparse--default-help-formatter의 확장 버전입니다.

import argparse
import sys

class CustomHelpFormatter(argparse.HelpFormatter):
    def _format_action(self, action):
        if type(action) == argparse._SubParsersAction:
            # inject new class variable for subcommand formatting
            subactions = action._get_subactions()
            invocations = [self._format_action_invocation(a) for a in subactions]
            self._subcommand_max_length = max(len(i) for i in invocations)

        if type(action) == argparse._SubParsersAction._ChoicesPseudoAction:
            # format subcommand help line
            subcommand = self._format_action_invocation(action) # type: str
            width = self._subcommand_max_length
            help_text = ""
            if action.help:
                help_text = self._expand_help(action)
            return "  {:{width}} -  {}\n".format(subcommand, help_text, width=width)

        elif type(action) == argparse._SubParsersAction:
            # process subcommand help section
            msg = '\n'
            for subaction in action._get_subactions():
                msg += self._format_action(subaction)
            return msg
        else:
            return super(CustomHelpFormatter, self)._format_action(action)


def check():
    print("status")
    return 0

parser = argparse.ArgumentParser(usage="sub <command>", add_help=False,
             formatter_class=CustomHelpFormatter)

subparser = parser.add_subparsers(dest="cmd")
subparser.add_parser('status', help='show status')
subparser.add_parser('list', help='print list')

# custom help messge
parser._positionals.title = "commands"

# hack to show help when no arguments supplied
if len(sys.argv) == 1:
    parser.print_help()
    sys.exit(0)

args = parser.parse_args()

if args.cmd == 'list':
    print('list')
elif args.cmd == 'status':
    sys.exit(check())

인자없는 출력 :

usage: sub <command>

commands:

  status -  show status
  list   -  print list


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow