Parse über boolesche Werte in Befehlszeilenargumenten

Vaibhav Vaibhav 12 April 2022
Parse über boolesche Werte in Befehlszeilenargumenten

Beim Ausführen von Python-Skripten über eine beliebige Befehlszeile, z. B. die Eingabeaufforderung, Git Bash, das Linux-Terminal, die MAC-Shell usw., können wir Argumente oder Werte an sie übergeben. Diese Werte werden als Befehlszeilenargumente bezeichnet.

Diese Argumente sind im Allgemeinen Ganzzahlen, Gleitkommazahlen, Zeichenketten und boolesche Werte, die als Zeichenketten dargestellt werden, was bedeutet, dass sie innerhalb des Codes typisiert werden müssen.

In diesem Artikel erfahren Sie, wie Sie boolesche Werte aus Befehlszeilenargumenten mit Python parsen.

Parsen boolescher Werte aus Kommandozeilenargumenten mit dem Modul argparse in Python

Python hat eine Reihe wesentlicher eingebauter Module wie math, random, json, csv usw., die darauf abzielen, allgemeine und sich wiederholende Programmierprobleme zu lösen. Ein solches Paket ist argparse, das Programmierern hilft, schnell benutzerfreundliche Befehlszeilenschnittstellen zu schreiben. Mit diesem Modul kann man die Argumente definieren, die das Programm benötigt, um korrekt zu funktionieren.

Abgesehen von der Definition kann das Modul argparse auch Standardwerte, Fehlermeldungen und Hilfetexte definieren und allgemeine Aktionen über Werte wie Validierung, Typumwandlung, Konvertierung usw. ausführen. Wir können das Modul argparse für unseren Anwendungsfall verwenden.

Wir werden ein Programm implementieren, das einen String-Wert und zwei boolesche Werte benötigt, um richtig zu funktionieren. Dies ist nur ein Beispiel zum Verständnis.

Siehe den folgenden Python-Code.

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))

Erläuterung des Python-Codes

Der obige Python-Code erstellt zunächst ein Objekt der Klasse ArgumentParser. Diese Klasse verfügt über alle Dienstprogramme zum Parsen der Befehlszeilenargumente. Es folgt die Klassensignatur dieser Klasse.

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)

Alle diese Argumente sind Schlüsselwortargumente und sollten als Schlüsselwortargumente an die Klasse übergeben werden.

Als nächstes fügen wir mit der Funktion add_argument() dieses Objekts dem Parser Argumente hinzu. Im Folgenden sind einige der Hauptargumente für diese Funktion aufgeführt.

  • name - Ein Name oder eine Liste von Optionszeichenfolgen. Zum Beispiel world oder --world und -w.
  • action – Die auszuführende Aktion, wenn dieses Argument in den Befehlszeilenargumenten gefunden wird.
  • nargs – Die Anzahl der Kommandozeilenargumente, die berücksichtigt werden sollen.
  • type - Der Datentyp, in den das Argument umgewandelt werden soll.
  • const – Ein konstanter Wert, der für action und nargs benötigt wird.
  • default – Der Standardwert, der berücksichtigt werden sollte, wenn das Argument in den Befehlszeilenargumenten fehlt.
  • help - Der Hilfetext für das Argument.

Wir fügen drei Argumente hinzu, nämlich name, --burger und --cake. Hier ist name ein Positionsargument, und --burger und --cake sind zwei optionale Argumente. Wir definieren den Hilfetext für jedes Argument und für optionale Argumente definieren wir auch die Standardwerte.

Als nächstes konvertieren wir die String-Argumente mit der Methode parse_args() in ihre jeweiligen Objekte oder Datentypen. Diese Methode gibt ein Namespace-Objekt zurück, das alle Argumente als Schlüssel enthält, die auf ihre jeweiligen konvertierten Werte zeigen. Wir können auf diese typisierten Werte wie folgt zugreifen.

args.name
args.burger
args.cake

Wir definieren auch zwei Funktionen, nämlich parse_boolean() und output(). Die Funktion parse_boolean() akzeptiert den eingegebenen Wert als Kommandozeilenargument neben optionalen booleschen Argumenten. Dann interpretiert es den Wert und gibt den entsprechenden booleschen Wert zurück.

Beachten Sie, dass die Funktion hier für jeden Kauderwelsch-Wert False zurückgibt. Man kann auch eine Exception auslösen, anstatt einen Standardwert zurückzugeben. Sie können dies mit dem folgenden Befehl testen.

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

Ausgabe:

Vaibhav is eating nothing.

Die andere Funktion ist die Funktion output(). Diese Funktion akzeptiert die drei Werte (eine Zeichenfolge und zwei boolesche Werte) und gibt eine geeignete Ausgabezeichenfolge zurück.

Testen

Führen Sie zum Testen des Programms die folgenden Befehle in einer beliebigen Befehlszeile aus. Beachten Sie, dass die folgenden Befehle berücksichtigen, dass der obige Python-Code in einer Datei mit dem Namen main.py vorhanden ist.

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

Ausgabe:

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

Wie wir sehen können, wirft der letzte Befehl, python main.py, einen Fehler. Der Grund dafür ist einfach; name ist ein positionelles und obligatorisches Argument.

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.