Analyser les valeurs booléennes dans les arguments de ligne de commande

Vaibhav Vaibhav 12 avril 2022
Analyser les valeurs booléennes dans les arguments de ligne de commande

Lors de l’exécution de scripts Python à partir de n’importe quelle ligne de commande, par exemple, l’invite de commande, le Git Bash, le terminal Linux, le MAC Shell, etc., nous pouvons leur transmettre des arguments ou des valeurs. Ces valeurs sont appelées arguments de ligne de commande.

Ces arguments sont généralement des nombres entiers, des nombres flottants, des chaînes et des valeurs booléennes représentées sous forme de chaînes, ce qui signifie qu’ils doivent être typés à l’intérieur du code.

Dans cet article, nous allons apprendre à analyser des valeurs booléennes à partir d’arguments de ligne de commande à l’aide de Python.

Analyser des valeurs booléennes à partir d’arguments de ligne de commande à l’aide du module argparse en Python

Python a un tas de modules intégrés essentiels tels que math, random, json, csv, etc. qui visent à résoudre des problèmes de programmation généraux et répétitifs. L’un de ces packages est argparse qui aide les programmeurs à écrire rapidement des interfaces de ligne de commande conviviales. En utilisant ce module, on peut définir les arguments dont le programme a besoin pour fonctionner correctement.

Outre la définition, le module argparse peut également définir des valeurs par défaut, des messages d’erreur, des textes d’aide et effectuer des actions courantes sur des valeurs telles que la validation, le transtypage, la conversion, etc. Nous pouvons utiliser le module argparse pour notre cas d’utilisation.

Nous allons implémenter un programme qui a besoin d’une valeur de chaîne et de deux valeurs booléennes pour fonctionner correctement. Ceci est juste un exemple à des fins de compréhension.

Reportez-vous au code Python suivant.

import argparse


def parse_boolean(value):
    value = value.lower()

    if value in ["true", "yes", "y", "1", "t"]:
        return True
    elif value in ["false", "no", "n", "0", "f"]:
        return False

    return False


def output(name, burger, cake):
    if burger and cake:
        return f"{name} is eating a burger and a cake."
    elif burger:
        return f"{name} is eating a burger."
    elif cake:
        return f"{name} is eating a cake."

    return f"{name} is eating nothing."


parser = argparse.ArgumentParser(
    description="A program that accepts one string and two boolean values."
)
parser.add_argument("name", help="Name of a person.")
parser.add_argument(
    "--burger", type=parse_boolean, default=False, help="Flag for burger."
)
parser.add_argument("--cake", type=parse_boolean, default=False, help="Flag for cake.")
args = parser.parse_args()
print(output(args.name, args.burger, args.cake))

Explication du code Python

Le code Python ci-dessus crée d’abord un objet de la classe ArgumentParser. Cette classe contient tous les utilitaires pour analyser les arguments de la ligne de commande. Voici la signature de classe de cette classe.

class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True, exit_on_error=True)

Tous ces arguments sont des arguments de mots-clés, et ils doivent être passés en tant qu’arguments de mots-clés à la classe.

Ensuite, en utilisant la fonction add_argument() de cet objet, nous ajoutons des arguments à l’analyseur. Voici quelques-uns des principaux arguments de cette fonction.

  • name - Un nom ou une liste de chaînes d’options. Par exemple, world, ou --world et -w.
  • action - L’action à entreprendre lorsque cet argument se trouve dans les arguments de la ligne de commande.
  • nargs - Le nombre d’arguments de ligne de commande à prendre en compte.
  • type - Le type de données vers lequel l’argument doit être converti.
  • const - Une valeur constante requise pour action et nargs.
  • default - La valeur par défaut qui doit être prise en compte si l’argument est absent des arguments de la ligne de commande.
  • help - Le texte d’aide pour l’argument.

Nous ajoutons trois arguments, à savoir, name, --burger, et --cake. Ici, name est un argument de position, et --burger et --cake sont deux arguments optionnels. Nous définissons le texte d’aide pour chaque argument, et pour les arguments facultatifs, nous définissons également les valeurs par défaut.

Ensuite, nous convertissons les arguments de chaîne en leurs objets ou types de données respectifs à l’aide de la méthode parse_args(). Cette méthode renvoie un objet Namespace qui contient tous les arguments sous forme de clés pointant vers leurs valeurs converties respectives. Nous pouvons accéder à ces valeurs typées comme suit.

args.name
args.burger
args.cake

Nous définissons également deux fonctions, à savoir parse_boolean() et output(). La fonction parse_boolean() accepte la valeur saisie comme argument de ligne de commande à côté des arguments booléens facultatifs. Ensuite, il interprète la valeur et renvoie la valeur booléenne correspondante.

Notez qu’ici la fonction renverra False pour toute valeur charabia. On peut aussi lever une Exception au lieu de retourner une valeur par défaut. Vous pouvez tester cela en utilisant la commande suivante.

python main.py Vaibhav --burger Hello --cake World

Production :

Vaibhav is eating nothing.

L’autre fonction est la fonction output(). Cette fonction accepte les trois valeurs (une chaîne et deux booléens) et renvoie une chaîne de sortie appropriée.

Essai

Pour tester le programme, exécutez les commandes suivantes à partir de n’importe quelle ligne de commande. Notez que les commandes suivantes considèrent que le code Python ci-dessus est présent dans un fichier nommé main.py.

python main.py Vaibhav --burger True --cake True
python main.py Vaibhav --burger T --cake 0
python main.py Vaibhav --burger False --cake False
python main.py Vaibhav --burger True --cake False
python main.py Vaibhav --burger False --cake True
python main.py Vaibhav --burger ABC --cake XYZ
python main.py Vaibhav
python main.py Vaibhav --burger True
python main.py Vaibhav --cake False
python main.py

Production :

Vaibhav is eating a burger and a cake.
Vaibhav is eating a burger.
Vaibhav is eating nothing.
Vaibhav is eating a burger.
Vaibhav is eating a cake.
Vaibhav is eating nothing.
Vaibhav is eating nothing.
Vaibhav is eating a burger.
Vaibhav is eating nothing.
usage: main.py [-h] [--burger BURGER] [--cake CAKE] name
main.py: error: the following arguments are required: name

Comme nous pouvons le voir, la dernière commande, python main.py, renvoie une erreur. La raison derrière la même chose est simple; name est un argument positionnel et obligatoire.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.