Opdrachtregelargumenten toevoegen aan een Python-script

How Add Command Line Arguments Python Script



Als u een Python-script of -toepassing hebt ontwikkeld die voornamelijk bedoeld is om in 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 verbeteren. 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 met de naam argparse gebruiken. 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 argparse-module 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 best worden begrepen aan de hand van voorbeelden. Hieronder vindt u enkele codevoorbeelden waarmee u aan de slag kunt met de argparse-module.



Voorbeeld 1: Genereer hulpargument en bericht

Bekijk het onderstaande codevoorbeeld:



importerenargparse

parser =argparse.ArgumentParser(Omschrijving='Een testprogramma.')

argumenten= parser.parse_args()

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





Ervan uitgaande dat u het hierboven vermelde codevoorbeeld hebt opgeslagen in een bestand met de naam test.py, krijgt u door het uitvoeren van de onderstaande opdrachten hulpberichten met betrekking tot het programma.

$ ./toets.py-H

$ ./toets.py-helpen

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 af ​​te handelen en ze naar objecten te converteren aan het hierboven genoemde codevoorbeeld. Daarom worden hulpberichten voor individuele argumenten niet weergegeven in de uitvoer. Zodra u logica toevoegt voor het afhandelen van waarden van geparseerde argumenten in uw programma, zullen Help-berichten beginnen met het weergeven van een beschrijving 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:

importerenargparse

parser =argparse.ArgumentParser(Omschrijving='Een testprogramma.')

parser.add_argument('print_string', helpen='Drukt het opgegeven argument af.')

argumenten= parser.parse_args()

afdrukken(argumentenprint_string)

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

Houd er rekening mee dat de methode add_argument standaard waarden behandelt die zijn opgehaald uit argumenten als tekenreeksen, dus u hoeft het type in dit geval niet expliciet op te geven. De standaardwaarde Geen wordt ook toegewezen aan toegevoegde argumenten, tenzij deze worden overschreven.

Kijk nog eens naar 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 sleutelwoord voor argument is gedefinieerd, wordt het argument momenteel behandeld als een positioneel argument waarbij de volgorde en positie van het opgegeven argument 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 – (dubbel streepje) gebruiken en hun standaardwaarden wijzigen met behulp van het standaardargument.

importerenargparse

parser =argparse.ArgumentParser(Omschrijving='Een testprogramma.')

parser.add_argument('--print_string', helpen='Drukt het opgegeven argument af.',standaard=TOTwillekeurig snaar.)

argumenten= parser.parse_args()

afdrukken(argumentenprint_string)

Als u nu het test.py-script uitvoert zonder enig argument, zou u een willekeurige tekenreeks moeten krijgen. als uitvoer. U kunt optioneel ook het trefwoord –print_string gebruiken om een ​​string naar keuze af te drukken.

$ ./toets.py--print_string LinuxHint.metLinuxHint.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 - (enkel streepje) om de breedsprakigheid te verminderen.

importerenargparse

parser =argparse.ArgumentParser(Omschrijving='Een testprogramma.')

parser.add_argument(-P, '--print_string', helpen='Drukt het opgegeven argument af.',standaard=TOTwillekeurig snaar.)

argumenten= parser.parse_args()

afdrukken(argumentenprint_string)

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

$ ./toets.py-p LinuxHint.met

Voorbeeld 3: Omgaan met een geheel getal-argument

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

importerenargparse

parser =argparse.ArgumentParser(Omschrijving='Een testprogramma.')

parser.add_argument('-P', '--print_string', helpen='Drukt het opgegeven argument af.', type=int)

argumenten= parser.parse_args()

afdrukken(argumentenprint_string)

Probeer de volgende opdracht uit te voeren:

$ ./toets.py-p LinuxHint.met

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.com'

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

$ ./toets.py-P10001000

Voorbeeld 4: Waar en niet waar schakelen

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

importerenargparse

parser =argparse.ArgumentParser(Omschrijving='Een testprogramma.')

parser.add_argument('-P', '--print_string', helpen='Drukt het opgegeven argument af.',actie='store_true')

argumenten= parser.parse_args()

afdrukken(argumentenprint_string)

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

$ ./toets.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 action sleutelwoord kent een True waarde toe aan de print_string variabele wanneer het -p argument expliciet wordt gespecificeerd, 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 nargs-sleutelwoord in het volgende formaat opgeven:

importerenargparse

parser =argparse.ArgumentParser(Omschrijving='Een testprogramma.')

parser.add_argument('-P', '--print_string', helpen='Drukt het opgegeven argument af.',nargs='*')

argumenten= parser.parse_args()

afdrukken(argumentenprint_string)

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

$ ./toets.py-p een 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.