Krajta

Jak přidat argumenty příkazového řádku do skriptu Python

Jak přidat argumenty příkazového řádku do skriptu Python

Pokud jste vyvinuli skript nebo aplikaci Pythonu, která má být primárně spuštěna v terminálových emulátorech nebo dokonce v aplikacích GUI, přidání argumentů příkazového řádku může zlepšit jeho použitelnost, čitelnost kódu, strukturu aplikace a celkovou uživatelskou přívětivost aplikace pro koncové uživatele. Tyto argumenty příkazového řádku se také nazývají „options“ nebo „switche“ a fungují podobně jako argumenty, které obvykle vidíte v bash skriptech a dalších programech založených na C / C ++.

Chcete-li přidat argumenty do skriptů Pythonu, budete muset použít vestavěný modul s názvem „argparse“. Jak název napovídá, analyzuje argumenty příkazového řádku použité při spuštění skriptu nebo aplikace Python. Tyto analyzované argumenty také kontroluje modul „argparse“, aby se ujistil, že mají správný „typ“. Chyby jsou vyvolány, pokud jsou v argumentech neplatné hodnoty.

Využití modulu argparse lze nejlépe pochopit na příkladech. Níže uvádíme několik ukázek kódu, které vám pomohou začít s modulem argparse.

Příklad 1: Generování argumentu nápovědy a zprávy

Zvažte ukázku kódu níže:

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

První příkaz importuje modul „argparse“. Dále je vytvořena nová instance objektu „ArgumentParser“ a jako argument je uveden krátký popis programu. Objekt ArgumentParser je potřebný k převodu hodnot argumentů příkazového řádku na datové typy srozumitelné Pythonu. To se provádí metodou „parse_args“ objektu ArgumentParser, jak je znázorněno v posledním příkazu.

Za předpokladu, že jste uložili ukázku kódu uvedenou výše v souboru s názvem „test.py ”, spuštěním níže uvedených příkazů získáte zprávy nápovědy související s programem.

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

Měli byste získat nějaký výstup podobný tomuto:

použití: test.py [-h]
Testovací program.
volitelné argumenty:
-h, --help zobrazit tuto nápovědu a ukončit

Všimněte si, že do výše uvedeného ukázkového kódu nebyla přidána žádná logika pro zpracování analyzovaných argumentů a jejich převod na objekty. Proto se ve výstupu nezobrazují zprávy nápovědy pro jednotlivé argumenty. Jakmile do svého programu přidáte logiku pro zpracování hodnot analyzovaných argumentů, začnou se v nápovědě zobrazovat popis jednotlivých argumentů.

Příklad 2: Zpracování řetězcového argumentu

Chcete-li přidat argumenty přijatelné pro váš skript pythonu, musíte použít metodu „add_argument“. Podívejte se na následující kód:

importovat argparse
parser = argparse.ArgumentParser (description = 'Testovací program.')
analyzátor.add_argument ("print_string", help = "Vytiskne zadaný argument.")
args = analyzátor.parse_args ()
tisk (arg.print_string)

Byl přidán nový příkaz ukazující použití metody „add_argument“. Jakýkoli argument přidaný při spuštění skriptu bude programem „ArgumentParser“ považován za objekt „print_string“.

Všimněte si, že ve výchozím nastavení metoda „add_argument“ zachází s hodnotami získanými z argumentů jako s řetězci, takže v tomto případě nemusíte explicitně specifikovat „typ“. Výchozí hodnota „Žádná“ je také přidělena přidaným argumentům, pokud není přepsána.

Ještě jednou se podívejte na zprávu nápovědy:

použití: test.py [-h] [řetězec_tisku]
Testovací program.
poziční argumenty:
print_string Vytiskne zadaný argument.
volitelné argumenty:
-h, --help zobrazit tuto nápovědu a ukončit

Jeden z řádků na výstupu říká „poziční argumenty“. Protože není definováno žádné klíčové slovo pro argument, v současné době je argument považován za „poziční argument“, kde pořadí a pozice zadaného argumentu má přímý účinek na program. Povinné argumenty jsou také povinné, pokud ručně nezměníte jejich chování.

Chcete-li definovat a analyzovat volitelné argumenty, můžete použít „-“ (dvojitá pomlčka) a změnit jejich výchozí hodnoty pomocí argumentu „výchozí“.

importovat argparse
parser = argparse.ArgumentParser (description = 'Testovací program.')
analyzátor.add_argument ("- print_string", help = "Vytiskne zadaný argument.", default =” Náhodný řetězec.”)
args = analyzátor.parse_args ()
tisk (arg.print_string)

Nyní, když spustíte „test.py “skript bez jakéhokoli argumentu, měli byste dostat„ Náhodný řetězec.“Jako výstup. Můžete také volitelně použít klíčové slovo „-print_string“ k tisku libovolného řetězce podle vašeho výběru.

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

Upozorňujeme, že volitelný argument můžete učinit povinným pomocí dalšího argumentu „required = True“.

Nakonec můžete také definovat zkratkové verze argumentu pomocí „-“ (jednoduchá pomlčka), abyste snížili výřečnost.

importovat argparse
parser = argparse.ArgumentParser (description = 'Testovací program.')
analyzátor.add_argument (“- p”, "--print_string", help = "Vytiskne zadaný argument.", default =” Náhodný řetězec.”)
args = analyzátor.parse_args ()
tisk (arg.print_string)

Spuštěním následujícího příkazu byste měli získat stejný výsledek jako výše:

$ ./test.py -p LinuxHint.com

Příklad 3: Zpracování celočíselného argumentu

Chcete-li zpracovat argumenty, které vyžadují celočíselné hodnoty, je třeba nastavit klíčové slovo „type“ na „int“, aby bylo možné ověřit a vyvolat chyby v případě, že podmínka není splněna.

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

Zkuste spustit následující příkaz:

$ ./test.py -p LinuxHint.com

Měla by se zobrazit chyba, jako je tato:

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

Zadáním celočíselné hodnoty získáte správný výsledek:

$ ./test.py -p 1000 1000

Příklad 4: Zacházení s True a False Toggles

Pomocí argumentu „akce“ můžete předat argumenty bez jakýchkoli hodnot a považovat je za příznaky True a False.

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

Spuštěním následujícího příkazu získáte jako výstup jednoduché „True“:

$ ./test.py -p

Pokud spustíte skript bez argumentu „-p“, bude místo toho přiřazena hodnota „False“. Hodnota „store_true“ klíčového slova „action“ přiřadí hodnotě „True“ proměnné „print_string“, kdykoli je výslovně uveden argument „-p“, jinak je proměnné přiřazena hodnota False.

Příklad 5: Považovat hodnoty argumentů za seznam

Chcete-li získat více hodnot najednou a uložit je do seznamu, musíte zadat klíčové slovo „nargs“ v následujícím formátu:

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

Spuštěním následujícího příkazu otestujte výše uvedený kód:

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

Měli byste získat nějaký výstup, jako je tento:

['a', 'b']

Závěr

Modul „argparse“ je docela komplexní a má spoustu možností, jak vyladit chování aplikací příkazového řádku a analyzovat hodnoty dodané uživatelem. Tyto příklady se dotýkají pouze základního použití modulu „argparse“. U pokročilých a složitých aplikací možná budete potřebovat různé implementace. Úplné vysvětlení modulu naleznete v oficiální dokumentaci.

Hry Výukový program Battle for Wesnoth
Výukový program Battle for Wesnoth
The Battle for Wesnoth je jednou z nejpopulárnějších strategických her s otevřeným zdrojovým kódem, které si v tuto chvíli můžete zahrát. Tato hra se ...
Hry 0 A.D. Tutorial
0 A.D. Tutorial
Z mnoha strategických her venku je 0 A.D. dokáže vyniknout jako komplexní titul a velmi hluboká, taktická hra, přestože je otevřeným zdrojem. Vývoj hr...
Hry Výukový program Unity3D
Výukový program Unity3D
Úvod do Unity 3D Unity 3D je výkonný engine pro vývoj her. Jedná se o multiplatformní platformu, která vám umožňuje vytvářet hry pro mobilní zařízení,...