Python : argparse

De Justine's wiki
Aller à la navigation Aller à la recherche

Librairie argparse

Cette libraire est très utilisée pour gérer les arguments de notre programme.

Le but va être de créer un objet parser, qui va connaître un certain nombre d'arguments possibles (leur nom, leur type, leur aide qu'il affichera avec un appel du type --help).

Exemples

Basique <source lang="python"> import argparse

  1. Initialisation, la description est le message affiché au sommet de l'aide

parser = argparse.ArgumentParser(description="Mes arguments sont meilleurs que les tiens")

  1. Ajout d'un argument facultatif, appellé avec -t

parser.add_argument("-t", "--type", type=str, help="choose the dns type for your query", default="a")

  1. Ajout d'un argument obligatoire

parser.add_argument("-s", "--server", type=str, help="choose a server", default="9.9.9.9", required=True)

  1. Ajout d'un argument appellé avec rien du tout (positionnel)

parser.add_argument('domain', type=str, help="ayo le domaine") args = parser.parse_args() </source>

Ici, je pourrais récupérer mes arguments en fonction de leur nom. <source lang="python"> print(args.type, args.domain) </source>

Je peux désormais appeller mon script avec --help ou -h et l'aide sortira sans que j'ai eu à la configurer <source lang="python"> % ./exemple.py --help Sandbox/Useless Ulysses usage: exemple.py [-h] [-t TYPE] -s SERVER domain

Mes arguments sont meilleurs que les tiens

positional arguments:

 domain                ayo le domaine

optional arguments:

 -h, --help            show this help message and exit
 -t TYPE, --type TYPE  choose the dns type for your query
 -s SERVER, --server SERVER
                       choose a server

</source>

Et l'appel du script en oubliant un argument obligatoire provoquera une erreur: <source lang="python">

% ./exemple.py                                                       Sandbox/Useless Ulysses

usage: exemple.py [-h] [-t TYPE] -s SERVER domain exemple.py: error: the following arguments are required: -s/--server, domain </source>