Zoeken…


Invoering

Verschillende manieren om subopdrachten te maken, zoals in hg of svn met de exacte opdrachtregelinterface en Help-uitvoer, zoals weergegeven in het gedeelte Opmerkingen.

Parsing Command Line-argumenten hebben betrekking op een breder onderwerp van het parseren van argumenten.

Opmerkingen

Verschillende manieren om subopdrachten te maken, zoals in hg of svn met de opdrachtregelinterface die wordt weergegeven in het helpbericht:

usage: sub <command>

commands:

  status -  show status
  list   -  print list

Inheemse manier (geen bibliotheken)

"""
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())

Uitvoer zonder argumenten:

usage: sub <command>

commands:

  status -  show status
  list   -  print list

Voors:

  • geen deps
  • iedereen zou dat moeten kunnen lezen
  • volledige controle over help-opmaak

argparse (standaard helpformatter)

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())

Uitvoer zonder argumenten:

usage: sub {status,list} ...

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

Voors:

  • komt met Python
  • optie parsing is inbegrepen

argparse (aangepaste helpformatter)

Uitgebreide versie van http://www.riptutorial.com/python/example/25282/argparse--default-help-formatter- die de Help-uitvoer repareerde.

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())

Uitvoer zonder argumenten:

usage: sub <command>

commands:

  status -  show status
  list   -  print list


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow