Bei all den Fähigkeiten und Optionen in argparseIch glaube nicht, dass Sie jemals eine "eingemachte" Verwendungszeichenfolge erhalten werden, die so aussieht, wie Sie es möchten.
Haben Sie sich seit Ihrem ursprünglichen Beitrag Sub-Parser angesehen?
Hier ist eine Barebone-Implementierung:
import argparse
parser = argparse.ArgumentParser(prog='mydaemon')
sp = parser.add_subparsers()
sp_start = sp.add_parser('start', help='Starts %(prog)s daemon')
sp_stop = sp.add_parser('stop', help='Stops %(prog)s daemon')
sp_restart = sp.add_parser('restart', help='Restarts %(prog)s daemon')
parser.parse_args()
Wenn Sie dies mit der -hOption ausführen, erhalten Sie:
usage: mydaemon [-h] {start,stop,restart} ...
positional arguments:
{start,stop,restart}
start Starts mydaemon daemon
stop Stops mydaemon daemon
restart Restarts mydaemon daemon
Einer der Vorteile dieses Ansatzes besteht darin, set_defaultsdass jeder Subparser eine Funktion direkt mit dem Argument verknüpfen kann. Ich habe auch eine "anmutige" Option für stopund hinzugefügt restart:
import argparse
def my_stop(args):
if args.gracefully:
print "Let's try to stop..."
else:
print 'Stop, now!'
parser = argparse.ArgumentParser(prog='mydaemon')
graceful = argparse.ArgumentParser(add_help=False)
graceful.add_argument('-g', '--gracefully', action='store_true', help='tries to terminate the process gracefully')
sp = parser.add_subparsers()
sp_start = sp.add_parser('start', help='Starts %(prog)s daemon')
sp_stop = sp.add_parser('stop', parents=[graceful],
description='Stops the daemon if it is currently running.',
help='Stops %(prog)s daemon')
sp_restart = sp.add_parser('restart', parents=[graceful], help='Restarts %(prog)s daemon')
sp_stop.set_defaults(func=my_stop)
args = parser.parse_args()
args.func(args)
Anzeigen der "Hilfe" -Nachricht für stop:
$ python mydaemon.py stop -h
usage: mydaemon stop [-h] [-g]
Stops the daemon if it is currently running.
optional arguments:
-h, --help show this help message and exit
-g, --gracefully tries to terminate the process gracefully
"Anmutig" anhalten:
$ python mydaemon.py stop -g
Let's try to stop...