Bei all den Fähigkeiten und Optionen in argparse
Ich 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 -h
Option 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_defaults
dass jeder Subparser eine Funktion direkt mit dem Argument verknüpfen kann. Ich habe auch eine "anmutige" Option für stop
und 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...