Je crée un script python où je veux avoir un argument qui manipule le nombre de résultats de recherche que vous obtenez en sortie. J'ai actuellement nommé l'argument --head
. Voici la fonctionnalité que j'aimerais qu'elle ait:
Quand --head
n'est pas passé sur la ligne de commande. Je voudrais qu'il prenne par défaut une valeur. Dans ce cas, un assez gros, comme 80
Quand --head
est passé sans aucune valeur, je voudrais qu'il prenne par défaut une autre valeur. Dans ce cas, quelque chose de limité, comme 10
Quand --head
est passé avec une valeur, j'aimerais qu'il stocke la valeur qu'il a été passée.
Voici un code décrivant le problème:
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-h',
'--head',
dest='size',
const=80,
default=10,
action="I don't know",
help='Only print the head of the output')
>>> # OFC, that last line will fail because the action is uknown,
... # but here is how I'd like it to work
... parser.parse_args(''.split())
Namespace(size=80)
>>> parser.parse_args('--head'.split())
Namespace(size=10)
>>> parser.parse_args('--head 15'.split())
Namespace(size=15)
Je sais que je peux probablement écrire une action personnalisée pour cela, mais je veux d'abord voir s'il y a un comportement par défaut qui fait cela.
Après un peu plus de lecture dans la documentation, j'ai trouvé ce dont j'avais besoin: nargs='?'
. Ceci est utilisé avec l'action store
et fait exactement ce que je veux.
Voici un exemple:
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--head',
dest='size',
const=10,
default=80,
action='store',
nargs='?',
type=int,
help='Only print the head of the output')
>>> parser.parse_args(''.split())
... Namespace(size=80)
>>> parser.parse_args('--head'.split())
... Namespace(size=10)
>>> parser.parse_args('--head 15'.split())
... Namespace(size=15)
Source: http://docs.python.org/3/library/argparse.html#nargs