Comment faire de python argparse mutuellement exclusifs groupe arguments sans préfixe?
Python2.7 argparse accepte uniquement les arguments optionnels (préfixé) dans les groupes mutuellement exclusifs:
parser = argparse.ArgumentParser(prog='mydaemon')
action = parser.add_mutually_exclusive_group(required=True)
action.add_argument('--start', action='store_true', help='Starts %(prog)s daemon')
action.add_argument('--stop', action='store_true', help='Stops %(prog)s daemon')
action.add_argument('--restart', action='store_true', help='Restarts %(prog)s daemon')
$ mydaemon -h
usage: mydaemon [-h] (--start | --stop | --restart)
optional arguments:
-h, --help show this help message and exit
--start Starts mydaemon daemon
--stop Stops mydaemon daemon
--restart Restarts mydaemon daemon
Est-il un moyen de faire argparse arguments se comporte comme unix traditionnel démon de contrôle:
(start | stop | restart) and not (--start | --stop | --restart) ?
Vous devez vous connecter pour publier un commentaire.
Pour toutes les capacités et les options dans
argparse
je ne pense pas que vous obtiendrez jamais une "conserve" l'utilisation de la chaîne qui ressemble à ce que vous voulez.Cela dit, avez-vous regardé sous-analyseurs depuis votre post original?
Voici un barebones mise en œuvre:
L'exécution de ce avec la
-h
option rendements:L'un des avantages de cette approche est de pouvoir utiliser
set_defaults
pour chaque sous-analyseur de brancher une fonction directement à l'argument. J'ai aussi ajouté un "gracieux" option pourstop
etrestart
:Montrant les "aider" message pour
stop
:Arrêt "normalement":
set_defaults
de pymotw
de sortie:
version2
Il semble que vous voulez une position argument au lieu des options mutuellement exclusives. Vous pouvez utiliser l'option "choix" pour limiter les possibles options acceptables.
Ce produit de l'utilisation de la ligne qui ressemble à ceci:
foo.py start stop
Bâtiment sur Adam de la réponse... si vous voulais spécifier une valeur par défaut, vous pouvez toujours effectuer les opérations suivantes afin qu'elles puissent laisser le champ vide.
qui permet d'imprimer: