Python Language
CLI-subopdrachten met nauwkeurige Help-uitvoer
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