Travailler avec les arguments optionnels
Les arguments optionnels offrent une grande flexibilité dans les interfaces en ligne de commande. Contrairement aux arguments positionnels, les arguments optionnels :
- Sont préfixés par des tirets (généralement
-
pour les formes courtes et --
pour les formes longues)
- Peuvent être omis (le programme utilisera les valeurs par défaut si elles sont fournies)
- Peuvent être fournis dans n'importe quel ordre
- Sont idéaux pour les options de configuration qui ne sont pas essentielles au fonctionnement du programme
Créons un programme qui démontre l'utilisation d'arguments optionnels.
Créer un programme de salutation avec des arguments optionnels
-
Dans l'IDE Web, créez un nouveau fichier appelé greeting.py
dans le répertoire /home/labex/project
.
-
Ajoutez le code suivant au fichier :
import argparse
## Create an argument parser
parser = argparse.ArgumentParser(description="A customizable greeting program")
## Add optional arguments
parser.add_argument("-n", "--name", default="World", help="The name to greet (default: World)")
parser.add_argument("-g", "--greeting", default="Hello", help="The greeting to use (default: Hello)")
parser.add_argument("-c", "--count", type=int, default=1, help="Number of times to display the greeting (default: 1)")
## Parse the arguments
args = parser.parse_args()
## Display the greeting
for _ in range(args.count):
print(f"{args.greeting}, {args.name}!")
-
Enregistrez le fichier.
-
Exécutez le programme sans aucun argument :
python /home/labex/project/greeting.py
- Vous devriez voir le message de salutation par défaut :
Hello, World!
- Essayez maintenant de personnaliser le message de salutation avec des arguments optionnels :
python /home/labex/project/greeting.py --name Alice --greeting Hi
- Vous devriez voir le message de salutation personnalisé :
Hi, Alice!
- Vous pouvez également utiliser les formes courtes des arguments :
python /home/labex/project/greeting.py -n Bob -g Hey -c 3
- Cela devrait afficher le message de salutation trois fois :
Hey, Bob!
Hey, Bob!
Hey, Bob!
Types d'arguments optionnels
argparse
prend en charge plusieurs types d'arguments optionnels :
-
Arguments indicateurs (flag arguments): Des indicateurs booléens qui sont soit présents, soit absents
-
Arguments avec valeurs: Des arguments optionnels qui prennent des valeurs
Modifions notre programme de salutation pour inclure un argument indicateur :
-
Ouvrez greeting.py
dans l'IDE Web.
-
Ajoutez un argument indicateur pour afficher le message en majuscules :
import argparse
## Create an argument parser
parser = argparse.ArgumentParser(description="A customizable greeting program")
## Add optional arguments
parser.add_argument("-n", "--name", default="World", help="The name to greet (default: World)")
parser.add_argument("-g", "--greeting", default="Hello", help="The greeting to use (default: Hello)")
parser.add_argument("-c", "--count", type=int, default=1, help="Number of times to display the greeting (default: 1)")
parser.add_argument("-u", "--uppercase", action="store_true", help="Display the greeting in uppercase")
## Parse the arguments
args = parser.parse_args()
## Create the greeting message
message = f"{args.greeting}, {args.name}!"
## Convert to uppercase if requested
if args.uppercase:
message = message.upper()
## Display the greeting
for _ in range(args.count):
print(message)
-
Enregistrez le fichier.
-
Exécutez le programme avec l'indicateur pour les majuscules :
python /home/labex/project/greeting.py -n Charlie -u
- Vous devriez voir le message de salutation en majuscules :
HELLO, CHARLIE!
Le paramètre action="store_true"
signifie que l'indicateur ne prend pas de valeur - il est soit présent (True), soit absent (False).
Les arguments optionnels rendent vos interfaces en ligne de commande plus flexibles et plus conviviales. Ils permettent aux utilisateurs de personnaliser le comportement de votre programme sans avoir à fournir toutes les informations à chaque fois.
Dans l'étape suivante, nous verrons comment combiner des arguments positionnels et optionnels dans un même programme.