Accéder au contenu principal

Maîtrisez le module argparse de Python : Construire de meilleurs CLIs

Apprenez à construire des interfaces de ligne de commande efficaces en Python à l'aide du module argparse. Ce guide vous présente les fonctionnalités de base et avancées, avec des exemples pratiques et des conseils pour améliorer vos compétences en programmation.
Actualisé 14 févr. 2025  · 12 min de lecture

Python est un langage de programmation puissant qui permet aux développeurs de créer une grande variété d'applications, des scripts de base aux grands systèmes logiciels. L'une des tâches de programmation les plus courantes consiste à créer des interfaces de ligne de commande (CLI), qui permettent aux utilisateurs d'interagir avec des programmes par l'intermédiaire d'un terminal ou d'une ligne de commande. Les CLI sont essentielles pour l'écriture de scripts, l'automatisation et les cas où une interface utilisateur graphique n'est pas pratique.

La gestion des paramètres de la ligne de commande est un élément important de la conception des CLI. Ces arguments permettent aux utilisateurs d'influencer le comportement d'un programme en lui fournissant des paramètres d'entrée pendant son exécution. Sans la possibilité d'évaluer ces facteurs, les programmes seraient moins polyvalents et plus difficiles à adapter à des tâches spécifiques.

Python fournit plusieurs modules pour analyser les arguments de la ligne de commande, mais le module argparse se distingue par sa simplicité et son exhaustivité. Le module argparse facilite le développement d'interfaces fonctionnelles en ligne de commande. Il gère automatiquement l'analyse des paramètres, affiche des instructions utiles et fournit des erreurs lorsque les utilisateurs fournissent des informations incorrectes.

Dans ce tutoriel, nous verrons comment utiliser le paquetage Python argparse. Nous commencerons par un aperçu des interfaces de ligne de commande de Python et de l'importance de l'analyse des entrées de ligne de commande. Nous aborderons ensuite le module argparse et ses avantages.

Aperçu des interfaces de ligne de commande en Python

Les interfaces de ligne de commande sont des programmes qui fonctionnent uniquement à partir de commandes textuelles. Les utilisateurs saisissent des commandes dans un terminal ou une ligne de commande, qui comprennent généralement des arguments et des options qui modifient le comportement du programme. Les CLI sont utiles parce qu'elles sont facilement automatisées et intégrées à d'autres technologies.

En Python, une CLI est créée en développant un script qui accepte les entrées de la ligne de commande. Cette entrée est généralement présentée sous la forme d'une liste d'arguments auxquels le script peut accéder et qu'il peut interpréter. Pour les programmes de base, la gestion manuelle de ces arguments via la liste sys.argv peut suffire. Cependant, lorsque la complexité du programme augmente, le traitement manuel des arguments devient inefficace et source d'erreurs.

Importance de l'analyse des arguments de la ligne de commande

L'analyse des arguments de la ligne de commande est nécessaire pour de nombreuses raisons : 

  • Flexibilité: En prenant des paramètres, un programme peut effectuer plusieurs tâches ou agir sur différents ensembles de données sans modifier le code. Les utilisateurs peuvent spécifier les fichiers à traiter, configurer les paramètres et sélectionner les modes de fonctionnement.
  • Convivialité: L'analyse correcte des arguments permet au programme d'afficher des messages utiles, d'indiquer à l'utilisateur comment utiliser le programme et de gérer les erreurs de manière élégante.
  • Maintenabilité: L'utilisation d'un module d'analyse dédié, tel que argparse, rend votre code plus clair et plus facile à maintenir. Il sépare la logique utilisée pour analyser les arguments de l'opération principale du programme.

Introduction au module argparse et à ses avantages

Le module argparse fait partie de la bibliothèque standard de Python. Il peut donc être utilisé sans installer de paquetage supplémentaire. Il offre une interface simple et cohérente pour analyser les entrées de la ligne de commande. Voici quelques-uns des avantages de l'utilisation de argparse:

  • Génération automatique d'aide: Il génère des messages d'aide et d'utilisation basés sur les arguments du code.
  • Gestion des erreurs: Il affiche des messages d'erreur utiles lorsque les utilisateurs saisissent des arguments non valides.
  • Conversion de type: Il peut convertir automatiquement les chaînes de paramètres dans le type de données approprié.
  • Il prend en charge les arguments positionnels nécessaires et les arguments facultatifs avec simplicité.
  • Valeurs par défaut: Il vous permet de fournir des valeurs par défaut pour les paramètres que l'utilisateur ne fournit pas.

argparse permet aux développeurs de se concentrer sur les fonctionnalités principales de leur programme tout en s'appuyant sur une base solide pour la gestion des entrées en ligne de commande.

Configuration de argparse et utilisation de base

Maintenant que nous avons abordé l'importance de l'analyse des arguments de la ligne de commande et les avantages de l'utilisation de argparse, voyons comment la configurer et l'utiliser dans un script Python.

Installation et importation de argparse

Il n'est pas nécessaire d'installer quoi que ce soit séparément car argparse fait partie de la bibliothèque standard de Python. Vous pouvez l'importer dès le début de votre script.

import argparse

Cette ligne charge le module argparse dans votre script, ce qui vous permet d'utiliser sa fonctionnalité d'analyse des arguments de la ligne de commande.

Création d'un analyseur d'arguments simple

La première étape de l'utilisation de argparse consiste à générer un objet d'analyseur. Cet objet stocke des informations sur les arguments acceptés par votre programme et analyse les entrées de la ligne de commande.

parser = argparse.ArgumentParser(description='Process some integers.')

Dans cet exemple, nous créons un objet ArgumentParser() et décrivons le programme. Lorsque l'utilisateur sélectionne l'option d'aide (-h ou --help), cette description s'affiche.

Ajout d'arguments positionnels et optionnels

Maintenant que nous avons développé l'analyseur, nous pouvons spécifier les arguments que notre programme acceptera.

Ajouter des arguments de position

Les arguments de position sont essentiels et doivent être présentés dans un ordre précis. Prenons l'exemple d'un script qui additionne deux nombres. Nous pouvons définir deux arguments de position pour les nombres :

parser.add_argument('num1', type=int, help='The first number to add.')
parser.add_argument('num2', type=int, help='The second number to add.')

Dans ce code, num1 et num2 font référence aux paramètres de position.

type=int indique que les paramètres doivent être convertis en nombres entiers. L'argument help spécifie une description qui apparaîtra dans le message d'aide.

Ajouter des arguments facultatifs

Les arguments facultatifs ne sont pas nécessaires et fournissent généralement des options supplémentaires ou modifient le comportement du programme. Ils sont généralement précédés d'un ou deux tirets. Nous ajouterons un argument facultatif pour activer la sortie verbale :

parser.add_argument('-v', '--verbose', action='store_true', help='Increase output verbosity.')

Ici :

  • L'option courte est -v (par exemple, -v). --verbose est une option longue.
  • action='store_true' indique que si l'option est sélectionnée, l'attribut verbose aura la valeur True; sinon, il aura la valeur False.
  • L'argument help spécifie une description pour le message d'aide.

Analyse des arguments et accès à leurs valeurs

Après avoir spécifié tous les arguments, nous devons analyser l'entrée de la ligne de commande. Pour ce faire, utilisez la méthode .parse_args().

args = parser.parse_args()

Les paramètres analysés sont maintenant stockés dans la variable args en tant qu'attributs. Nous pouvons y accéder en utilisant la notation par points.

result = args.num1 + args.num2
print('The sum of {} and {} is {}'.format(args.num1, args.num2, result))
if args.verbose:
    print('Verbose mode is enabled.')

Voici donc un script complet qui ajoute deux nombres et inclut un mode verbeux optionnel :

import argparse
parser = argparse.ArgumentParser(description='Add two integers.')
parser.add_argument('num1', type=int, help='The first number to add.')
parser.add_argument('num2', type=int, help='The second number to add.')
parser.add_argument('-v', '--verbose', action='store_true', help='Increase output verbosity.')
args = parser.parse_args()
result = args.num1 + args.num2
print('The sum of {} and {} is {}'.format(args.num1, args.num2, result))
if args.verbose:
    print('Calculation completed successfully.')

Vous pouvez exécuter ce script à partir de la ligne de commande et fournir les arguments de position requis :

python add_numbers.py 3 5
The sum of 3 and 5 is 8

Si vous incluez l'option -v ou --verbose, le script affichera un message verbeux supplémentaire :

python add_numbers.py 3 5 --verbose
The sum of 3 and 5 is 8
Calculation completed successfully.

Si l'utilisateur exécute le script avec l'option -h ou --help, argparse affichera un message d'aide généré automatiquement :

python add_numbers.py -h
usage: add_numbers.py [-h] [-v] num1 num2
Add two integers.
positional arguments:
  num1           The first number to add.
  num2           The second number to add.
optional arguments:
  -h, --help     show this help message and exit
  -v, --verbose  Increase output verbosity.

Cette fonction rend votre programme plus convivial en fournissant des instructions claires sur la manière de l'utiliser.

Traitement avancé des arguments

Lorsque vous développez des programmes en ligne de commande en Python, vous pouvez rencontrer des scénarios nécessitant une analyse plus complexe des arguments. Le module argparse de Python comprend plusieurs fonctionnalités pour répondre à ces exigences complexes, ce qui vous permet de développer des interfaces flexibles et conviviales.

Utilisation de nargs pour des arguments multiples

Dans certains cas, votre application doit accepter plusieurs valeurs pour le même argument. Par exemple, supposons que vous souhaitiez créer un script qui traite plusieurs fichiers à la fois. Le paramètre nargs de argparse vous permet de spécifier le nombre d'arguments de la ligne de commande à lire.

Voici comment utiliser nargs pour accepter plusieurs noms de fichiers :

import argparse
parser = argparse.ArgumentParser(description='Process multiple files.')
parser.add_argument('filenames', nargs='+', help='List of files to process.')
args = parser.parse_args()
for filename in args.filenames:
    print(f'Processing file: {filename}')
    # Add your file processing code here

Dans ce cas, nargs='+' indique à l'analyseur qu'il doit s'attendre à ce qu'un ou plusieurs arguments figurent dans les noms de fichiers. L'utilisateur peut fournir autant de noms de fichiers que nécessaire, et ils seront enregistrés dans une liste appelée args.filenames.

Si vous souhaitez accepter un certain nombre d'arguments, fixez la valeur de nargs à ce nombre. Par exemple, nargs=2 requiert exactement deux paramètres.

Mise en œuvre de choix pour limiter les valeurs des arguments

Parfois, vous souhaitez limiter un argument à une plage de valeurs valides spécifiée. Cela garantit que l'utilisateur fournit des données valables, ce qui permet d'éviter les erreurs ou les actions inattendues. Le paramètre options vous permet de spécifier les valeurs autorisées pour un argument.

Considérons un script qui exécute plusieurs activités en fonction d'un mode sélectionné par l'utilisateur.

import argparse
parser = argparse.ArgumentParser(description='Perform actions in different modes.')
parser.add_argument('--mode', choices=['backup', 'restore', 'delete'], required=True, help='Mode of operation.')
args = parser.parse_args()
if args.mode == 'backup':
    print('Backing up data...')
    # Backup code here
elif args.mode == 'restore':
    print('Restoring data...')
    # Restore code here
elif args.mode == 'delete':
    print('Deleting data...')
    # Delete code here

Dans ce script, l'argument --mode doit être l'une des options. Si l'utilisateur saisit une valeur qui ne figure pas dans la liste, argparse renvoie un message d'erreur.

Gestion des drapeaux booléens et des bascules

Les indicateurs booléens sont des choix qui permettent d'activer ou de désactiver des fonctionnalités spécifiques dans votre application. Ils sont généralement définis sans valeur, simplement en incluant l'indicateur dans la commande. Vous pouvez gérer ces drapeaux dans argparse avec le paramètre action.

Par exemple, incluons un mode de débogage dans un script :

import argparse
parser = argparse.ArgumentParser(description='A script with debug mode.')
parser.add_argument('--debug', action='store_true', help='Enable debug output.')
args = parser.parse_args()
if args.debug:
    print('Debug mode is enabled.')
    # Additional debug information here
else:
    print('Debug mode is disabled.')

En utilisant action='store_true', l'indicateur --debug définira args.debug à True s'il est présent et False dans le cas contraire.

Définition des valeurs par défaut et des arguments requis

Les arguments facultatifs comprennent souvent des valeurs par défaut raisonnables. Cela signifie que si l'utilisateur ne spécifie pas l'argument, l'application utilisera la valeur par défaut. L'argument default vous permet de spécifier une valeur par défaut.

En voici un exemple :

import argparse
parser = argparse.ArgumentParser(description='Adjust program settings.')
parser.add_argument('--timeout', type=int, default=30, help='Timeout in seconds.')
args = parser.parse_args()
print(f'Timeout is set to {args.timeout} seconds.')

Dans ce scénario, si l'utilisateur n'indique pas --timeout, la valeur par défaut est de 30 secondes.

Pour rendre un argument facultatif obligatoire, set required=True.

import argparse
parser = argparse.ArgumentParser(description='Send a message.')
parser.add_argument('--recipient', required=True, help='Recipient of the message.')
args = parser.parse_args()
print(f'Sending message to {args.recipient}.')

Le script requiert désormais l'argument --recipient.

Personnalisation des messages d'aide et d'erreur

Fournir des messages clairs et utiles aux utilisateurs est un élément essentiel du développement d'un programme de ligne de commande efficace. Le module Python argparse crée automatiquement des messages d'aide, mais vous pouvez modifier ces messages pour mieux les adapter à vos besoins.

Générer des messages d'aide automatiques

Par défaut, argparse génère un message d'aide, auquel vous pouvez accéder en utilisant les options -h ou --help. Ce message contient l'utilisation du programme, une description et des informations sur chaque argument.

Par exemple :

import argparse
parser = argparse.ArgumentParser(description='Calculate factorial of a number.')
parser.add_argument('number', type=int, help='The number to calculate the factorial for.')
args = parser.parse_args()

Lorsqu'un utilisateur exécute le script à l'aide de -h, il verra :

usage: script.py [-h] number
Calculate factorial of a number.
positional arguments:
  number      The number to calculate the factorial for.
optional arguments:
  -h, --help  show this help message and exit

Ce message d'aide automatique fournit des informations utiles sans nécessiter d'effort supplémentaire.

Personnalisation des descriptions d'aide et des messages d'utilisation

Bien que les messages d'aide par défaut soient utiles, vous pouvez les modifier pour fournir des informations supplémentaires ou pour les adapter à une structure spécifique. Vous pouvez modifier la description, l'épilogue et le texte d'utilisation sur le site ArgumentParser.

Par exemple, pour inclure un épilogue et personnaliser le message d'utilisation :

import argparse
parser = argparse.ArgumentParser(
    description='Convert temperatures between Celsius and Fahrenheit.',
    epilog='Enjoy using the temperature converter!',
    usage='%(prog)s [options] temperature')
parser.add_argument('temperature', type=float, help='Temperature value to convert.')
parser.add_argument('--to-fahrenheit', action='store_true', help='Convert Celsius to Fahrenheit.')
parser.add_argument('--to-celsius', action='store_true', help='Convert Fahrenheit to Celsius.')
args = parser.parse_args()

Désormais, lorsque l'utilisateur consultera le message d'aide, celui-ci inclura la description personnalisée, l'utilisation et l'épilogue :

python file.py --help

usage: p.py [options] temperature

Convert temperatures between Celsius and Fahrenheit.

positional arguments:
  temperature      Temperature value to convert.

options:
  -h, --help       show this help message and exit
  --to-fahrenheit  Convert Celsius to Fahrenheit.
  --to-celsius     Convert Fahrenheit to Celsius.

Gestion du traitement des erreurs et du retour d'information de l'utilisateur

Si un utilisateur entre des arguments non valides, argparse affichera un message d'erreur et quittera le programme. Vous pouvez modifier ce comportement pour fournir un retour d'information plus utile ou pour gérer les échecs différemment.

Une approche consiste à surcharger la méthode d'erreur dans une sous-classe de ArgumentParser:

import argparse
import sys
class CustomArgumentParser(argparse.ArgumentParser):
    def error(self, message):
        print(f'Error: {message}')
        self.print_help()
        sys.exit(2)
parser = CustomArgumentParser(description='Divide two numbers.')
parser.add_argument('numerator', type=float, help='The numerator.')
parser.add_argument('denominator', type=float, help='The denominator.')
args = parser.parse_args()
if args.denominator == 0:
    parser.error('Denominator cannot be zero.')
result = args.numerator / args.denominator
print(f'Result: {result}')

Si l'utilisateur tente de diviser par zéro dans ce script, l'application affiche un avertissement d'erreur et un texte d'aide, invitant l'utilisateur à fournir des données valides.

Python file.py 6 0
Error: Denominator cannot be zero.
usage: file.py [-h] numerator denominator
Divide two numbers.
positional arguments:
  numerator    The numerator.
  denominator  The denominator.
options:
  -h, --help   show this help message and exit

Vous pouvez également inclure une gestion personnalisée des erreurs dans votre script. Par exemple, pour gérer les chemins d'accès aux fichiers non valides :

import argparse
import os
parser = argparse.ArgumentParser(description='Read a file and display its contents.')
parser.add_argument('filepath', help='Path to the file.')
args = parser.parse_args()
if not os.path.exists(args.filepath):
    parser.error(f"The file {args.filepath} does not exist.")
with open(args.filepath, 'r') as file:
    contents = file.read()
    print(contents)

Si vous exécutez le script avec un chemin d'accès non valide, vous obtiendrez l'erreur suivante :

python app..py file
usage: p.py [-h] filepath
app.py: error: The file file does not exist.

Exemples concrets et cas d'utilisation

Comprendre comment utiliser le module argparse dans le monde réel rendra sa fonctionnalité plus claire. Examinons quelques exemples d'utilisation de argparse dans des applications réelles.

Construire une calculatrice en ligne de commande

Supposons que vous deviez développer une calculatrice simple capable d'effectuer des opérations arithmétiques de base à partir de la ligne de commande. Cette calculatrice doit accepter deux nombres et un opérateur pour exécuter le calcul demandé.

Voici comment aborder cette tâche :

import argparse
parser = argparse.ArgumentParser(description='Simple command-line calculator.')
parser.add_argument('num1', type=float, help='First number.')
parser.add_argument('operator', choices=['+', '-', '*', '/'], help='Operation to perform.')
parser.add_argument('num2', type=float, help='Second number.')
args = parser.parse_args()
if args.operator == '+':
    result = args.num1 + args.num2
elif args.operator == '-':
    result = args.num1 - args.num2
elif args.operator == '*':
    result = args.num1 * args.num2
elif args.operator == '/':
    if args.num2 == 0:
        print('Error: Division by zero is not allowed.')
        exit(1)
    result = args.num1 / args.num2
print(f'The result is: {result}')

Dans ce script, le module argparse est utilisé pour définir trois arguments positionnels : deux nombres et un opérateur. L'argument choices limite l'opérateur aux symboles arithmétiques valides. Lorsque l'utilisateur exécute le script, il peut effectuer ces calculs :

python calculator.py 10 + 5
The result is: 15.0

Cette calculatrice de base montre comment les options de la ligne de commande peuvent améliorer la flexibilité et l'interactivité d'un programme.

Création d'un script de traitement de fichiers avec plusieurs options

Supposons que vous ayez besoin d'un script qui traite des fichiers texte et propose des options telles que la désignation d'un fichier de sortie, la sélection d'un mode de traitement et l'activation d'une sortie verbeuse.

Voici un exemple de la façon dont vous pourriez le mettre en place :

import argparse
parser = argparse.ArgumentParser(description='Process text files.')
parser.add_argument('input_file', help='Path to the input file.')
parser.add_argument('-o', '--output', help='Path to the output file.')
parser.add_argument('-m', '--mode', choices=['uppercase', 'lowercase'], default='uppercase', help='Processing mode.')
parser.add_argument('-v', '--verbose', action='store_true', help='Enable verbose output.')
args = parser.parse_args()
# Read the input file
with open(args.input_file, 'r') as file:
    content = file.read()
if args.verbose:
    print(f'Reading from {args.input_file}')
# Process the content
if args.mode == 'uppercase':
    processed_content = content.upper()
else:
    processed_content = content.lower()
if args.verbose:
    print('Processing content')
# Write to the output file or print to console
if args.output:
    with open(args.output, 'w') as file:
        file.write(processed_content)
    if args.verbose:
        print(f'Writing output to {args.output}')
else:
    print(processed_content)

Ce script accepte un fichier d'entrée et dispose d'options pour le fichier de sortie, le mode de traitement et la sortie verbeuse. Les utilisateurs peuvent modifier le comportement du script sans modifier le code.

python text_processor.py input.txt -o output.txt --mode lowercase -v
Reading from input.txt
Processing content
Writing output to output.txt

Développer un outil CLI avec des sous-commandes

Dans les applications plus complexes, des sous-commandes peuvent être nécessaires, de la même manière que git utilise des commandes telles que git commit et git push. Le module argparse fournit des sous-parcelles à cette fin.

Voici comment créer un outil CLI avec des sous-commandes :

import argparse
parser = argparse.ArgumentParser(description='Manage tasks.')
subparsers = parser.add_subparsers(dest='command', required=True)
# Subcommand 'add'
parser_add = subparsers.add_parser('add', help='Add a new task.')
parser_add.add_argument('name', help='Name of the task.')
parser_add.add_argument('-p', '--priority', type=int, choices=range(1, 6), default=3, help='Priority of the task.')
# Subcommand 'list'
parser_list = subparsers.add_parser('list', help='List all tasks.')
parser_list.add_argument('-a', '--all', action='store_true', help='List all tasks, including completed ones.')
# Subcommand 'complete'
parser_complete = subparsers.add_parser('complete', help='Mark a task as completed.')
parser_complete.add_argument('task_id', type=int, help='ID of the task to complete.')
args = parser.parse_args()
if args.command == 'add':
    print(f"Adding task '{args.name}' with priority {args.priority}")
    # Code to add the task
elif args.command == 'list':
    print('Listing tasks')
    if args.all:
        print('Including completed tasks')
    # Code to list tasks
elif args.command == 'complete':
    print(f'Marking task {args.task_id} as completed')
    # Code to complete the task

Dans cet exemple, le script comporte trois sous-commandes : add, list, et complete. Chaque sous-commande a ses arguments. Lorsque les utilisateurs exécutent le script, ils saisissent la sous-commande et les autres paramètres éventuels.

Par exemple :

python task_manager.py add "Write report" -p 2
Adding task 'Write report' with priority 2

Tâches d'inscription

python task_manager.py list
Listing tasks

Marquer les tâches comme terminées :

python task_manager.py complete 3
Marking task 3 as completed

subparsers vous permettent de créer des outils de ligne de commande complexes qui sont bien organisés et faciles à étendre, ce qui vous permet de créer des applications capables de faire plusieurs choses dans une seule interface. 

Meilleures pratiques et conseils pour Python argparse

Le développement de programmes en ligne de commande ne se limite pas à l'écriture d'un code qui fonctionne. Il s'agit également d'écrire un code propre, facile à maintenir et à utiliser. 

Voici quelques bonnes pratiques pour travailler avec le module argparse.

Organiser le code pour en faciliter la lecture et la maintenance

Lorsque vos scripts deviennent plus complexes, il est essentiel d'organiser votre code pour en faciliter la compréhension et la maintenance. Pour ce faire, vous pouvez utiliser des fonctions et des classes pour organiser des sections distinctes de votre code. 

La décomposition de votre programme en morceaux plus petits et réutilisables facilite sa gestion et élimine la duplication du code.

Par exemple, dans un script de gestion des tâches, vous pouvez définir différentes fonctions pour l'ajout de tâches, l'établissement de listes de tâches et l'achèvement de tâches. Cette division vous permet de vous concentrer sur un aspect de la logique à la fois, ce qui rend votre code plus clair.

Une autre technique efficace consiste à séparer la logique d'analyse des arguments du reste de votre code. En plaçant toutes les définitions d'arguments et l'analyse syntaxique au début de votre script, ou dans une fonction dédiée, il est plus facile pour les autres de comprendre comment votre programme gère les entrées.

L'utilisation de noms de variables appropriés améliore également la lisibilité. Choisissez des noms de variables qui reflètent leur fonction, afin que toute personne qui consulte votre code puisse comprendre ce qui se passe. L'ajout de commentaires et de docstrings pour expliquer ce que font vos fonctions et tous les détails clés peut contribuer à améliorer la compréhension.

Test et débogage des applications en ligne de commande

Le test de vos applications est essentiel pour garantir leur bon fonctionnement et détecter rapidement les défaillances. L'écriture de tests unitaires avec des frameworks de test Python tels que unittest ou pytest est une excellente approche pour tester votre code. Ces tests vous permettent d'imiter différentes entrées et de vous assurer que vos fonctions fonctionnent correctement.

Par exemple, vous pouvez tester plusieurs scénarios en simulant les entrées de la ligne de commande plutôt qu'en exécutant le script à partir de la ligne de commande. Cette stratégie vous permet de vous assurer que l'analyse des arguments fonctionne comme prévu et que votre application gère correctement les différents scénarios.

Il est également essentiel de gérer les exceptions avec élégance. En utilisant les blocs try-except, vous pouvez détecter les erreurs et envoyer des messages utiles à l'utilisateur. Cela rend votre application plus stable et plus conviviale.

Pensez également à inclure un drapeau de débogage dans votre script. Ce drapeau peut activer une sortie supplémentaire qui vous permet de suivre l'exécution du programme en cas de problème. Cette option facilite le diagnostic des problèmes tout au long du développement et de la maintenance.

Comparaison de argparse avec d'autres bibliothèques d'analyse d'arguments

Bien que argparse soit un utilitaire précieux dans la bibliothèque standard de Python, il existe des bibliothèques supplémentaires qui fournissent des méthodes alternatives pour analyser les arguments de la ligne de commande. La compréhension de ces options vous aidera à choisir l'outil adéquat pour votre projet.

L'une de ces bibliothèques est Click. Click est un paquetage tiers permettant de créer des interfaces en ligne de commande à l'aide de décorateurs. Il possède une syntaxe plus intuitive et est idéal pour les applications sophistiquées. Par exemple, vous pouvez utiliser des décorateurs Python pour créer des commandes et des options, ce qui rend votre code plus compact et plus compréhensible.

Docopt est une autre option qui vous permet de définir votre interface en ligne de commande à l'aide de la docstring du programme. Docopt analyse automatiquement le message d'aide et construit l'analyseur d'arguments lorsque les instructions d'utilisation sont incluses dans la chaîne de documentation. Cette approche est élégante et convient aux scripts simples qui nécessitent une spécification plus lisible par l'homme.

Lorsque vous choisissez la bibliothèque à laquelle vous allez faire appel, pensez aux exigences de votre projet. Si vous souhaitez éliminer les dépendances externes et que vous voulez un outil capable de gérer la plupart des circonstances, argparse est une excellente solution. Si vous souhaitez une syntaxe plus intuitive et que vous travaillez sur une application complexe, Click pourrait être mieux adapté. Docopt est un bon choix pour les petits programmes avec des interfaces simples.

Conclusion

Tout au long de cet article, nous avons vu comment utiliser le module Python argparse pour développer des programmes en ligne de commande en Python. En travaillant sur des exemples concrets, nous avons appris à créer des scripts réalistes qui reçoivent des données de l'utilisateur et accomplissent des tâches pertinentes.

De la conception d'une calculatrice de base au développement d'un outil de gestion des tâches avec des sous-commandes, le module argparse offre la polyvalence nécessaire pour faire face à un large éventail de circonstances. Vous pouvez concevoir des applications fiables et simples à maintenir en adhérant aux meilleures pratiques telles que l'organisation du code, les tests complets et la prise en compte de bibliothèques alternatives.

Que vous souhaitiez automatiser des activités, analyser des données ou créer des outils complexes, la compréhension de l'analyse des arguments de la ligne de commande améliore votre capacité à concevoir des programmes Python efficaces. Coulez vos connaissances en Python dès aujourd'hui grâce à notre parcours de compétences sur les principes fondamentaux de Python.

FAQ Python argparse

Comment rendre un argument optionnel obligatoire dans argparse ?

Les arguments optionnels dans argparse ne sont généralement pas nécessaires car ils sont, par définition, optionnels. Toutefois, il peut arriver que vous souhaitiez qu'un argument commençant par -- soit obligatoire. Pour ce faire, définissez le paramètre requis à True lorsque vous ajoutez l'argument.

Voici comment vous pouvez y parvenir :

import argparse
parser = argparse.ArgumentParser(description='Process some data.')
parser.add_argument('--input', required=True, help='Path to the input file.')
args = parser.parse_args()
print(f'Input file: {args.input}')

Comment gérer les arguments mutuellement exclusifs avec argparse ?

Il peut arriver que vous rencontriez des arguments qui ne doivent pas être utilisés ensemble. Par exemple, un script peut prendre soit --verbosesoit --quiet, mais pas les deux à la fois. Pour faire face à ce scénario, argparse prend en charge la définition de groupes mutuellement exclusifs.

Voici comment procéder :

import argparse
parser = argparse.ArgumentParser(description='Process some data.')
group = parser.add_mutually_exclusive_group()
group.add_argument('--verbose', action='store_true', help='Enable verbose output.')
group.add_argument('--quiet', action='store_true', help='Enable quiet mode.')
args = parser.parse_args()
if args.verbose:
    print('Verbose mode is on.')
elif args.quiet:
    print('Quiet mode is on.')
else:
    print('Default mode is on.')

Ce script permet à l'utilisateur d'activer le modeverbeux ou le modesilencieux de, mais pas les deux. S'ils tentent d'utiliser les deux options simultanément, lesite argparse émettra une erreur.

Comment utiliser argparse pour lire les arguments d'un fichier au lieu de la ligne de commande ?

Bien que argparse soit destiné à l'analyse des arguments de la ligne de commande, vous pouvez vouloir les lire à partir d'un fichier. Vous pouvez le faire en lisant les arguments du fichier et en les donnant à la méthode parse_args() via le paramètreargs.

En voici un exemple.

import argparse
parser = argparse.ArgumentParser(description='Process some data.')
parser.add_argument('--input', help='Path to the input file.')
parser.add_argument('--output', help='Path to the output file.')
# Read arguments from a file
with open('args.txt', 'r') as file:
    file_args = file.read().split()
args = parser.parse_args(file_args)
print(f'Input file: {args.input}')
print(f'Output file: {args.output}')

Dans ce cas, le fichier args.txt pourrait contenir :

--input data/input.txt --output data/output.txt

Le script lit les paramètres du fichier, les convertit en une liste, puis les donne à parse_args(). Cela vous permet de gérer vos arguments dans un fichier plutôt que de les saisir à chaque fois.

Comment personnaliser le message d'aide de argparse pour qu'il affiche les valeurs par défaut ?

Par défaut, argparse n'affiche pas les valeurs par défaut des paramètres dans le message d'aide. Si vous souhaitez inclure des valeurs par défaut dans le texte d'aide, modifiez le paramètre d'aide ou utilisez la commande ArgumentDefaultsHelpFormatter.

Voici comment ajouter des valeurs par défaut au message d'aide :

import argparse
parser = argparse.ArgumentParser(
    description='Process some data.',
    formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--timeout', type=int, default=60, help='Timeout in seconds.')
args = parser.parse_args()
print(f'Timeout is set to {args.timeout} seconds.')

Avec le format ArgumentDefaultsHelpFormatter, le message d'aide affichera la valeur par défaut de l'argument --timeout :

usage: script.py [-h] [--timeout TIMEOUT]
Process some data.
optional arguments:
  -h, --help         show this help message and exit
  --timeout TIMEOUT  Timeout in seconds. (default: 60)

Cela permet aux utilisateurs d'obtenir plus d'informations sur les paramètres par défaut de votre programme.

Quelles sont les meilleures pratiques pour tester les applications en ligne de commande qui utilisent argparse ?

Tester des applications en ligne de commande peut s'avérer difficile, mais il existe des méthodes pour faciliter les choses. Un moyen utile consiste à reproduire les arguments de la ligne de commande à l'aide du moduleunittest de .

Voici un exemple de test d'un script à l'aide de argparse:

import unittest
import argparse
import sys
def create_parser():
    parser = argparse.ArgumentParser(description='Process some data.')
    parser.add_argument('--number', type=int, help='A number.')
    return parser
def main(args):
    parser = create_parser()
    parsed_args = parser.parse_args(args)
    if parsed_args.number is None:
        parser.error('No number provided.')
    result = parsed_args.number * 2
    return result
class TestMain(unittest.TestCase):
    def test_main_with_number(self):
        test_args = ['--number', '5']
        result = main(test_args)
        self.assertEqual(result, 10)
    def test_main_without_number(self):
        test_args = []
        with self.assertRaises(SystemExit):
            main(test_args)
if __name__ == '__main__':
    unittest.main()

Dans le script de test :

  • La fonction .create_parser() initialise l'analyseur d'arguments.
  • La méthode main() traite les arguments et exécute la logique principale.
  • Le TestMain propose des méthodes de test pour simuler différentes entrées de ligne de commande.
  • Les tests permettent de s'assurer que le programme réagit comme prévu à diverses entrées.

Structurez votre code de manière à séparer le traitement des arguments et la logique primaire, afin de faciliter le test des différentes parties de votre programme.

Sujets
Apparenté

blog

Les 32 meilleures questions d'entretien sur AWS et leurs réponses pour 2024

Un guide complet pour explorer les questions d'entretien AWS de base, intermédiaires et avancées, ainsi que des questions basées sur des situations réelles. Il couvre tous les domaines, garantissant ainsi une stratégie de préparation bien équilibrée.
Zoumana Keita 's photo

Zoumana Keita

30 min

blog

2022-2023 Rapport annuel DataCamp Classrooms

À l'aube de la nouvelle année scolaire, DataCamp Classrooms est plus motivé que jamais pour démocratiser l'apprentissage des données, avec plus de 7 650 nouveaux Classrooms ajoutés au cours des 12 derniers mois.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 min

blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates a offert plus de 20k bourses d'études à nos partenaires à but non lucratif au deuxième trimestre 2023. Découvrez comment des apprenants défavorisés et assidus ont transformé ces opportunités en réussites professionnelles qui ont changé leur vie.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

blog

Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux

Vous êtes actuellement à la recherche d'un emploi qui utilise Snowflake ? Préparez-vous à répondre à ces 20 questions d'entretien sur le flocon de neige pour décrocher le poste !
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 min

blog

Célébration de Saghar Hazinyar : Une boursière de DataCamp Donates et une diplômée de Code to Inspire

Découvrez le parcours inspirant de Saghar Hazinyar, diplômée de Code to Inspire, qui a surmonté les défis en Afghanistan et s'est épanouie grâce à une bourse de DataCamp Donates.
Fereshteh Forough's photo

Fereshteh Forough

4 min

blog

Nous avons fait don de bourses DataCamp Premium à un million de personnes, et ce n'est pas fini.

Réparties entre nos deux programmes d'impact social, DataCamp Classrooms et #DCDonates, les bourses offrent un accès illimité à tout ce que DataCamp Premium a à offrir.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Voir plusVoir plus