Python

Ako pridať argumenty príkazového riadku do skriptu Python?

Ako pridať argumenty príkazového riadku do skriptu Python?
Ak ste vyvinuli skript alebo aplikáciu Python určenú na primárne spustenie v emulátoroch terminálu alebo dokonca v aplikáciách GUI, potom pridanie argumentov príkazového riadku môže zlepšiť jeho použiteľnosť, čitateľnosť kódu, štruktúru aplikácie a celkovú užívateľskú prívetivosť aplikácie pre koncových používateľov. Tieto argumenty príkazového riadku sa tiež nazývajú „voľby“ alebo „prepínače“ a fungujú podobne ako argumenty, ktoré sa zvyčajne vyskytujú v skriptoch bash a iných programoch založených na C / C ++.

Ak chcete do skriptov Pythonu pridať argumenty, budete musieť použiť vstavaný modul s názvom „Argparse“. Ako už názov napovedá, analyzuje argumenty príkazového riadku použité pri spustení skriptu alebo aplikácie Python. Tieto analyzované argumenty tiež kontroluje modul „argparse“, aby sa zabezpečilo, že majú správny „typ“. Ak sú v argumentoch neplatné hodnoty, chyby sa zvýšia.

Používanie modulu argparse možno najlepšie pochopiť na príkladoch. Ďalej uvádzame niekoľko ukážok kódov, ktoré vám pomôžu začať s modulom argparse.

Príklad 1: Generovanie argumentu pomoci a správy

Zvážte ukážku kódu uvedenú nižšie:

import argparse
parser = argparse.ArgumentParser (description = 'Testovací program.")
args = analyzátor.parse_args ()

Prvé vyhlásenie importuje modul „argparse“. Ďalej sa vytvorí nová inštancia objektu „ArgumentParser“ a ako argument sa uvedie krátky popis programu. Objekt ArgumentParser je potrebný na prevod hodnôt argumentov príkazového riadku na dátové typy, ktorým rozumie Python. To sa deje metódou „parse_args“ objektu ArgumentParser, ako je uvedené v poslednom príkaze.

Za predpokladu, že ste uložili ukážkový kód uvedený vyššie do súboru s názvom „test.py ”, spustením nižšie uvedených príkazov sa dostanete k pomoci správam súvisiacim s programom.

$ ./ test.py-h
$ ./ test.py - pomoc

Mali by ste dostať nejaký výstup podobný tomuto:

použitie: test.py [-h]
Voliteľné argumenty testovacieho programu:
-h, --help zobraziť túto pomocnú správu a ukončiť

Upozorňujeme, že do ukážky kódu uvedenej vyššie nebola pridaná žiadna logika na spracovanie analyzovaných argumentov a ich konverziu na objekty. Pomocné správy pre jednotlivé argumenty sa preto na výstupe nezobrazia. Po pridaní logiky pre spracovanie hodnôt analyzovaných argumentov vo vašom programe začnú pomocné správy zobrazovať popisy jednotlivých argumentov.

Príklad 2: Spracovanie reťazcového argumentu

Ak chcete pridať argumenty prijateľné pre váš skript v jazyku Python, musíte použiť metódu „add_argument“. Prezrite si nasledujúci kód:

import argparse
parser = argparse.ArgumentParser (description = 'Testovací program.")
parser.add_argument ("print_string", help = "Vypíše zadaný argument.„)
args = analyzátor.parse_args ()
tlač (arg.print_string)

Bolo pridané nové vyhlásenie, ktoré ukazuje použitie metódy „add_argument“. Akýkoľvek argument pridaný pri spustení skriptu bude nástrojom „ArgumentParser“ považovaný za objekt „print_string“.

Upozorňujeme, že v predvolenom nastavení metóda „add_argument“ zaobchádza s hodnotami získanými z argumentov ako s reťazcami, takže v takom prípade nemusíte explicitne špecifikovať „typ“. K pridaným argumentom je tiež priradená predvolená hodnota „Žiadne“, pokiaľ nie je prepísaná.

Znovu sa pozrite na pomocnú správu:

použitie: test.py [-h] [reťazec_tlače]
Pozičné argumenty testovacieho programu:
print_string vytlačí zadaný argument
voliteľné argumenty:
-h, --help zobraziť túto pomocnú správu a ukončiť

Jeden z riadkov na výstupe hovorí „pozičné argumenty“. Pretože nie je definované žiadne kľúčové slovo pre argument, v súčasnosti sa argument považuje za „pozičný argument“, kde poradie a pozícia dodaného argumentu majú priamy vplyv na program. Pozitívne argumenty sú tiež povinné, pokiaľ manuálne nezmeníte ich správanie.

Ak chcete definovať a analyzovať voliteľné argumenty, môžete použiť „-“ (dvojitá pomlčka) a zmeniť ich predvolené hodnoty pomocou argumentu „predvolený“.

import argparse
parser = argparse.ArgumentParser (description = 'Testovací program.")
parser.add_argument ("- print_string", help = "Vypíše zadaný argument.", default =” Náhodný reťazec.”)
args = analyzátor.parse_args ()
tlač (arg.print_string)

Teraz, keď spustíte „test.py “skript bez akýchkoľvek argumentov, mali by ste dostať„ Náhodný reťazec.”Ako výstup. Môžete tiež voliteľne použiť kľúčové slovo „-print_string“ na tlač ľubovoľného reťazca podľa vášho výberu.

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

Upozorňujeme, že voliteľný argument môžete urobiť povinným pomocou ďalšieho argumentu „required = True“.

Nakoniec môžete tiež zúžiť verzie argumentu pomocou „-“ (jedna pomlčka), aby ste znížili výrečnosť.

import argparse
parser = argparse.ArgumentParser (description = 'Testovací program.")
parser.add_argument (“- p”, "--print_string", help = "Vypíše zadaný argument.", default =” Náhodný reťazec.”)
args = analyzátor.parse_args ()
tlač (arg.print_string)

Spustenie nasledujúceho príkazu by malo poskytnúť rovnaký výsledok ako vyššie:

$ ./ test.py -p LinuxHint.com

Príklad 3: Spracovanie celočíselného argumentu

Ak chcete spracovať argumenty, ktoré vyžadujú celočíselné hodnoty, musíte nastaviť kľúčové slovo „type“ na „int“, aby ste umožnili overenie a vyhodili chyby v prípade, že podmienka nie je splnená.

import argparse
parser = argparse.ArgumentParser (description = 'Testovací program.")
parser.add_argument ("- p", "--print_string", help = "Vypíše zadaný argument.", typ = int)
args = analyzátor.parse_args ()
tlač (arg.print_string)

Skúste spustiť nasledujúci príkaz:

$ ./ test.py -p LinuxHint.com

Mali by ste dostať túto chybu:

použitie: test.py [-h] [-p PRINT_STRING]
test.py: error: argument -p / - print_string: neplatná int hodnota: 'LinuxHint.com '

Zadaním celočíselnej hodnoty získate správny výsledok:

$ ./ test.py -p 1000 1000

Príklad 4: Zaobchádzajte s prepínačmi True a False

Argumenty môžete zadávať bez akýchkoľvek hodnôt, aby ste s nimi mohli zaobchádzať ako s príznakmi True a False pomocou argumentu „action“.

import argparse
parser = argparse.ArgumentParser (description = 'Testovací program.")
parser.add_argument ("- p", "--print_string", help = "Vypíše zadaný argument.", action =" store_true ")
args = analyzátor.parse_args ()
tlač (arg.print_string)

Spustením príkazu nižšie získate ako výstup jednoduché „True“:

$ ./ test.py -p

Ak spustíte skript bez argumentu „-p“, bude namiesto neho priradená hodnota „False“. Hodnota „store_true“ kľúčového slova „action“ priraďuje premennej „print_string“ hodnotu „True“ vždy, keď je výslovne uvedený argument „-p“, inak je premennej priradená hodnota False.

Príklad 5: Považovať hodnoty argumentov za zoznam

Ak chcete získať viac hodnôt naraz a uložiť ich do zoznamu, musíte zadať kľúčové slovo „nargs“ v nasledujúcom formáte:

import argparse
parser = argparse.ArgumentParser (description = 'Testovací program.")
parser.add_argument ("- p", "--print_string", help = "Vypíše zadaný argument.", nargs = '*')
args = analyzátor.parse_args ()
tlač (arg.print_string)

Spustením nasledujúceho príkazu otestujte vyššie uvedený kód:

$ ./ test.py -p „a“ „b“

Mali by ste dostať nejaký výstup ako tento:

['a', 'b']

Záver

Modul „argparse“ je dosť komplexný s množstvom možností na vyladenie správania aplikácií príkazového riadku a analýzu hodnôt dodaných používateľom. Tieto príklady sa dotýkajú iba základného použitia modulu „argparse“. Pre pokročilé a zložité aplikácie budete možno potrebovať rôzne implementácie. Úplné vysvetlenie modulu nájdete v oficiálnej dokumentácii.

Hry SuperTuxKart pre Linux
SuperTuxKart pre Linux
SuperTuxKart je vynikajúci titul navrhnutý tak, aby vám priniesol zážitok z hry Mario Kart zadarmo na vašom systéme Linux. Je to dosť náročné a zábavn...
Hry Výukový program Battle for Wesnoth
Výukový program Battle for Wesnoth
Battle for Wesnoth je jednou z najpopulárnejších open source strategických hier, ktoré si v súčasnosti môžete zahrať. Táto hra bola nielen vyvinutá ve...
Hry 0 A.D. Výukový program
0 A.D. Výukový program
Z mnohých strategických hier je tu 0 A.D. dokáže vyniknúť ako komplexný titul a veľmi hlboká, taktická hra napriek tomu, že je otvoreným zdrojom. Vývo...