Python

Opdrachtregelargumenten toevoegen aan een Python-script?

Opdrachtregelargumenten toevoegen aan een Python-script?
Als u een Python-script of -toepassing hebt ontwikkeld die primair bedoeld is om in de terminalemulators of zelfs GUI-apps te worden uitgevoerd, kan het toevoegen van opdrachtregelargumenten de bruikbaarheid, de leesbaarheid van de code, de toepassingsstructuur en de algehele gebruiksvriendelijkheid van de toepassing voor de eindgebruikers. Deze opdrachtregelargumenten worden ook "opties" of "schakelaars" genoemd en werken op dezelfde manier als argumenten die u gewoonlijk ziet in bash-scripts en andere op C/C++ gebaseerde programma's.

Om argumenten aan Python-scripts toe te voegen, moet u een ingebouwde module gebruiken met de naam "argparse". Zoals de naam al doet vermoeden, parseert het opdrachtregelargumenten die worden gebruikt tijdens het starten van een Python-script of -toepassing. Deze geparseerde argumenten worden ook gecontroleerd door de module "argparse" om er zeker van te zijn dat ze van het juiste "type" zijn. Er worden fouten gemaakt als er ongeldige waarden in argumenten staan.

Het gebruik van de argparse-module kan het beste worden begrepen aan de hand van voorbeelden. Hieronder staan ​​enkele codevoorbeelden waarmee u aan de slag kunt met de argparse-module.

Voorbeeld 1: Genereer hulpargument en bericht

Bekijk het onderstaande codevoorbeeld:

import argparse
parser = argparse.ArgumentParser(description='Een testprogramma'.')
args = parser.parse_args()

De eerste instructie importeert de "argparse" -module. Vervolgens wordt een nieuwe instantie van het object "ArgumentParser" gemaakt en wordt een korte beschrijving van het programma als argument gegeven. Het ArgumentParser-object is nodig om opdrachtregelargumentwaarden te converteren naar gegevenstypen die door Python worden begrepen. Dit wordt gedaan door de "parse_args" -methode van het ArgumentParser-object, zoals weergegeven in de laatste instructie.

Ervan uitgaande dat u de bovenstaande voorbeeldcode hebt opgeslagen in een bestand met de naam “test.py", door de onderstaande opdrachten uit te voeren, krijgt u hulpberichten met betrekking tot het programma.

$ ./test.py -h
$ ./test.py --help

U zou een uitvoer moeten krijgen die lijkt op deze:

gebruik: test.py [-h]
Een testprogramma optionele argumenten:
-h, --help toon dit helpbericht en sluit af

Merk op dat er geen logica is toegevoegd om geparseerde argumenten te verwerken en ze naar objecten te converteren aan het hierboven genoemde codevoorbeeld. Daarom worden hulpberichten voor individuele argumenten niet weergegeven in de uitvoer. Zodra je logica hebt toegevoegd voor het verwerken van waarden van geparseerde argumenten in je programma, zullen help-berichten beginnen met het tonen van beschrijvingen voor individuele argumenten.

Voorbeeld 2: Een stringargument afhandelen

Om argumenten toe te voegen die acceptabel zijn voor uw Python-script, moet u de methode "add_argument" gebruiken. Kijk eens naar de volgende code:

import argparse
parser = argparse.ArgumentParser(description='Een testprogramma'.')
parser.add_argument("print_string", help="Drukt het opgegeven argument af.")
args = parser.parse_args()
print(args.print_string)

Er is een nieuwe verklaring toegevoegd, die het gebruik van de "add_argument"-methode toont. Elk argument dat wordt toegevoegd bij het starten van het script, wordt door "ArgumentParser" behandeld als een "print_string" -object.

Merk op dat de methode "add_argument" standaard waarden behandelt die zijn opgehaald uit argumenten als tekenreeksen, dus u hoeft in dit geval niet expliciet het "type" op te geven. Een standaardwaarde van "Geen" wordt ook toegewezen aan toegevoegde argumenten, tenzij overschreven over.

Bekijk nogmaals het helpbericht:

gebruik: test.py [-h] [print_string]
Een testprogramma positionele argumenten:
print_string drukt het opgegeven argument af
optionele argumenten:
-h, --help toon dit helpbericht en sluit af

Een van de regels in de uitvoer zegt "positionele argumenten". Aangezien er geen trefwoord voor argument is gedefinieerd, wordt het argument momenteel behandeld als een "positioneel argument" waarbij de volgorde en positie van het opgegeven argument een direct effect heeft op het programma. Positionele argumenten zijn ook verplicht, tenzij u hun gedrag handmatig wijzigt.

Om optionele argumenten te definiëren en te ontleden, kunt u "-" (dubbele streepjes) gebruiken en hun standaardwaarden wijzigen met behulp van het "default" -argument.

import argparse
parser = argparse.ArgumentParser(description='Een testprogramma'.')
parser.add_argument("--print_string", help="Drukt het opgegeven argument af.", default="Een willekeurige tekenreeks".”)
args = parser.parse_args()
print(args.print_string)

Wanneer u nu de “test.py" script zonder enig argument, zou je "A random string" moeten krijgen.” als uitvoer. U kunt optioneel ook het trefwoord "-print_string" gebruiken om een ​​willekeurige tekenreeks naar keuze af te drukken.

$ ./test.py --print_string LinuxHint.com
LinuxHint.com

Merk op dat u een optioneel argument verplicht kunt maken door een extra "required=True" -argument te gebruiken.

Ten slotte kunt u ook verkorte versies van het argument definiëren met behulp van "-" (een enkel streepje) om de breedsprakigheid te verminderen.

import argparse
parser = argparse.ArgumentParser(description='Een testprogramma'.')
parser.add_argument(“-p”, "--print_string", help="Drukt het opgegeven argument af.", default="Een willekeurige tekenreeks".”)
args = parser.parse_args()
print(args.print_string)

Als u de volgende opdracht uitvoert, krijgt u hetzelfde resultaat als hierboven:

$ ./test.py -p LinuxHint.com

Voorbeeld 3: Omgaan met een geheel getal-argument

Om argumenten te verwerken die gehele waarden nodig hebben, moet u het sleutelwoord "type" instellen op "int" om validatie en worpfouten mogelijk te maken in het geval dat niet aan de voorwaarde wordt voldaan.

import argparse
parser = argparse.ArgumentParser(description='Een testprogramma'.')
parser.add_argument("-p", "--print_string", help="Drukt het opgegeven argument af.", typ=int)
args = parser.parse_args()
print(args.print_string)

Probeer de volgende opdracht uit te voeren:

$ ./test.py -p LinuxHint.com

U zou een foutmelding als deze moeten krijgen:

gebruik: test.py [-h] [-p PRINT_STRING]
test.py: fout: argument -p/--print_string: ongeldige int-waarde: 'LinuxHint'.kom'

Als u een geheel getal invoert, krijgt u het juiste resultaat:

$ ./test.py -p 1000 1000

Voorbeeld 4: Waar en niet waar schakelen Fal

U kunt argumenten zonder waarden doorgeven om ze als True en False-vlaggen te behandelen met behulp van het argument "action".

import argparse
parser = argparse.ArgumentParser(description='Een testprogramma'.')
parser.add_argument("-p", "--print_string", help="Drukt het opgegeven argument af.", action="store_true")
args = parser.parse_args()
print(args.print_string)

Voer de onderstaande opdracht uit om een ​​eenvoudige "True" als uitvoer te krijgen:

$ ./test.py -p

Als u het script uitvoert zonder het argument "-p", wordt in plaats daarvan een waarde "False" toegewezen. De waarde "store_true" van het trefwoord "action" wijst een "True" -waarde toe aan de variabele "print_string" wanneer het argument "-p" expliciet is opgegeven, anders wordt False toegewezen aan de variabele.

Voorbeeld 5: Behandel argumentwaarden als lijst

Als u meerdere waarden tegelijk wilt krijgen en ze in een lijst wilt opslaan, moet u het trefwoord "nargs" in het volgende formaat opgeven:

import argparse
parser = argparse.ArgumentParser(description='Een testprogramma'.')
parser.add_argument("-p", "--print_string", help="Drukt het opgegeven argument af.", nargs='*')
args = parser.parse_args()
print(args.print_string)

Voer de volgende opdracht uit om de bovenstaande code te testen:

$ ./test.py -p "a" "b"

Je zou wat output als volgt moeten krijgen:

['een', 'b']

Conclusie

De "argparse" -module is behoorlijk uitgebreid met tal van opties om het gedrag van opdrachtregeltoepassingen aan te passen en door de gebruiker geleverde waarden te ontleden. Deze voorbeelden hebben alleen betrekking op het basisgebruik van de "argparse" -module. Voor geavanceerde en complexe toepassingen heeft u mogelijk verschillende implementaties nodig. Bezoek de officiële documentatie voor een volledige uitleg van de module.

Hoe AutoKey te gebruiken om Linux-spellen te automatiseren
AutoKey is een hulpprogramma voor desktopautomatisering voor Linux en X11, geprogrammeerd in Python 3, GTK en Qt. Met behulp van de scripting- en MACR...
Hoe FPS-teller in Linux-games te tonen
Linux-gaming kreeg een grote duw toen Valve in 2012 Linux-ondersteuning voor Steam-client en hun games aankondigde. Sindsdien hebben veel AAA- en indi...
Sid Meier's Civilization VI downloaden en spelen op Linux and
Inleiding tot het spel Civilization 6 is een moderne versie van het klassieke concept dat werd geïntroduceerd in de serie Age of Empires-games. Het id...