Je pense que cela doit être facile mais je ne comprends pas.
Supposons que je dispose de l'analyseur d'arparse suivant:
import argparse
parser = argparse.ArgumentParser( version='pyargparsetest 1.0' )
subparsers = parser.add_subparsers(help='commands')
# all
all_parser = subparsers.add_parser('all', help='process all apps')
# app
app_parser = subparsers.add_parser('app', help='process a single app')
app_parser.add_argument('appname', action='store', help='name of app to process')
Comment puis-je identifier quel sous-vendeur a été utilisé? appel:
print parser.parse_args(["all"])
me donne un espace de noms vide:
Namespace()
Edit: Veuillez consulter réponse de Quornian à cette question, qui est meilleure que la mienne et qui devrait être la réponse acceptée.
Selon le documentation argparse , le résultat de parser.parse_args(...)
ne "contiendra que des attributs pour l'analyseur principal et l'analyseur secondaire sélectionné". Malheureusement, ces informations peuvent ne pas être suffisantes pour déterminer quel analyseur secondaire a été utilisé. La documentation recommande d'utiliser la méthode set_defaults(...)
sur l'analyseur secondaire pour résoudre ce problème.
Par exemple, j'ai ajouté des appels à set_defaults()
à votre code:
import argparse
parser = argparse.ArgumentParser( version='pyargparsetest 1.0' )
subparsers = parser.add_subparsers(help='commands')
# all
all_parser = subparsers.add_parser('all', help='process all apps')
all_parser.set_defaults(which='all')
# app
app_parser = subparsers.add_parser('app', help='process a single app')
app_parser.add_argument('appname', action='store', help='name of app to process')
app_parser.set_defaults(which='app')
Maintenant si tu cours
print parser.parse_args(["all"])
Le résultat est
Namespace(which='all')
Consultez la documentation add_subparsers()
pour plus d'informations et un autre exemple.
Une solution plus simple consiste à ajouter dest
au fichier add_subparsers
appel. Ceci est enterré un peu plus loin dans le documentation :
[...] S'il est nécessaire de vérifier le nom du sous-fournisseur qui a été appelé, l'argument du mot clé dest de l'appel add_subparsers () fonctionnera.
Dans votre exemple, remplacez:
subparsers = parser.add_subparsers(help='commands')
avec:
subparsers = parser.add_subparsers(help='commands', dest='command')
Maintenant si vous courez:
print parser.parse_args(["all"])
tu auras
Namespace(command='all')