Cum se adaugă argumente de linie de comandă unui script Python

How Add Command Line Arguments Python Script



Dacă ați dezvoltat un script Python sau o aplicație menită să fie executată în principal în emulatoare de terminal sau chiar în aplicații GUI, adăugarea argumentelor de linie de comandă poate îmbunătăți ușurința, lizibilitatea codului, structura aplicației și ușurința generală a aplicației pentru utilizatorii finali. Aceste argumente din linia de comandă sunt numite și opțiuni sau comutatoare și funcționează similar cu argumentele pe care le vedeți de obicei în scripturile bash și alte programe bazate pe C / C ++.

Pentru a adăuga argumente scripturilor Python, va trebui să utilizați un modul încorporat numit argparse. După cum sugerează și numele, analizează argumentele din linia de comandă utilizate în timpul lansării unui script sau aplicație Python. Aceste argumente analizate sunt verificate și de modulul argparse pentru a se asigura că sunt de tip adecvat. Erorile sunt ridicate dacă există valori nevalide în argumente.







Utilizarea modulului argparse poate fi înțeleasă cel mai bine prin exemple. Mai jos sunt câteva exemple de coduri care vă vor ajuta să începeți cu modulul argparse.



Exemplul 1: Generați argumentul de ajutor și mesajul

Luați în considerare exemplul de cod de mai jos:



importargparse

analizor =argparse.ArgumentParser(Descriere=„Un program de testare”.)

argumente= analizor.parse_args()

Prima declarație importă modulul argparse. Apoi, este creată o nouă instanță a obiectului ArgumentParser și o scurtă descriere a programului este furnizată ca argument. Obiectul ArgumentParser este necesar pentru a converti valorile argumentului liniei de comandă în tipuri de date înțelese de Python. Acest lucru se face prin metoda parse_args a obiectului ArgumentParser, așa cum se arată în ultima declarație.





Presupunând că ați salvat eșantionul de cod menționat mai sus într-un fișier numit test.py, executarea comenzilor de mai jos vă va ajuta să primiți mesaje de ajutor legate de program.

$ ./Test.py-h

$ ./Test.py-Ajutor

Ar trebui să obțineți o ieșire similară cu aceasta:



utilizare: test.py [-h]


Un program de testare.


argumente opționale:

-h, --help afișează acest mesaj de ajutor și ieși

Rețineți că nu a fost adăugată la eșantionul de cod menționat mai sus nicio logică pentru a gestiona argumentele analizate și a le converti în obiecte. Prin urmare, mesajele de ajutor pentru argumente individuale nu sunt afișate în rezultat. Odată ce adăugați logică pentru gestionarea valorilor argumentelor analizate în programul dvs., mesajele de ajutor vor începe să afișeze descrierea argumentelor individuale.

Exemplul 2: gestionați un argument șir

Pentru a adăuga argumente acceptabile de scriptul dvs. python, trebuie să utilizați metoda add_argument. Aruncați o privire la următorul cod:

importargparse

analizor =argparse.ArgumentParser(Descriere=„Un program de testare”.)

analizor.add_argument('print_string', Ajutor=„Tipărește argumentul furnizat.”)

argumente= analizor.parse_args()

imprimare(argumente.print_string)

A fost adăugată o nouă declarație care arată utilizarea metodei add_argument. Orice argument adăugat la lansarea scriptului va fi tratat ca un obiect print_string de către ArgumentParser.

Rețineți că implicit, metoda add_argument tratează valorile extrase din argumente ca șiruri, deci nu trebuie să specificați în mod explicit tipul în acest caz. O valoare implicită a None este, de asemenea, atribuită argumentelor adăugate, cu excepția cazului în care este suprascrisă.

Încă o dată, aruncați o privire asupra mesajului de ajutor:

utilizare: test.py [-h] [print_string]


Un program de testare.


argumente poziționale:

print_string Imprimă argumentul furnizat.


argumente opționale:

-h, --help afișează acest mesaj de ajutor și ieși

Una dintre liniile din ieșire spune argumente poziționale. Deoarece nu este definit niciun cuvânt cheie pentru argument, în prezent argumentul este tratat ca un argument pozițional în care ordinea și poziția argumentului furnizat au efect direct asupra programului. Argumentele de poziție sunt, de asemenea, obligatorii, cu excepția cazului în care le schimbați manual comportamentul.

Pentru a defini și analiza argumentele opționale, puteți utiliza - (liniuță dublă) și puteți modifica valorile implicite folosind argumentul implicit.

importargparse

analizor =argparse.ArgumentParser(Descriere=„Un program de testare”.)

analizor.add_argument('--print_string', Ajutor=„Tipărește argumentul furnizat.”,Mod implicit=LAAleatoriu şir.)

argumente= analizor.parse_args()

imprimare(argumente.print_string)

Acum, când rulați scriptul test.py fără niciun argument, ar trebui să obțineți un șir aleatoriu. ca ieșire. De asemenea, puteți utiliza opțional cuvântul cheie –print_string pentru a imprima orice șir la alegere.

$ ./Test.py--print_string LinuxHint.cuLinuxHint.com

Rețineți că puteți face obligatoriu un argument opțional utilizând un argument suplimentar obligatoriu = Adevărat.

În cele din urmă, puteți defini, de asemenea, versiunile abreviate ale argumentului folosind - (singură liniuță) pentru a reduce verbozitatea.

importargparse

analizor =argparse.ArgumentParser(Descriere=„Un program de testare”.)

analizor.add_argument(-p, '--print_string', Ajutor=„Tipărește argumentul furnizat.”,Mod implicit=LAAleatoriu şir.)

argumente= analizor.parse_args()

imprimare(argumente.print_string)

Rularea următoarei comenzi ar trebui să vă ofere același rezultat ca mai sus:

$ ./Test.py-p LinuxHint.cu

Exemplul 3: gestionați un argument întreg

Pentru a gestiona argumentele care au nevoie de valori întregi, trebuie să setați tipul cuvântului cheie la int pentru a permite validarea și arunca erori în cazul în care condiția nu este îndeplinită.

importargparse

analizor =argparse.ArgumentParser(Descriere=„Un program de testare”.)

analizor.add_argument(„-p”, '--print_string', Ajutor=„Tipărește argumentul furnizat.”, tip=int)

argumente= analizor.parse_args()

imprimare(argumente.print_string)

Încercați să rulați următoarea comandă:

$ ./Test.py-p LinuxHint.cu

Ar trebui să primiți o astfel de eroare:

utilizare: test.py [-h] [-p PRINT_STRING]

test.py: eroare: argument -p / - print_string: valoare int invalidă: „LinuxHint.com”

Furnizarea unei valori întregi vă va oferi rezultatul corect:

$ ./Test.py-p10001000

Exemplul 4: Manevrați comutările adevărate și false

Puteți transmite argumente fără nicio valoare pentru a le trata ca steaguri True și False folosind argumentul de acțiune.

importargparse

analizor =argparse.ArgumentParser(Descriere=„Un program de testare”.)

analizor.add_argument(„-p”, '--print_string', Ajutor=„Tipărește argumentul furnizat.”,acțiune=„store_true”)

argumente= analizor.parse_args()

imprimare(argumente.print_string)

Rulați comanda de mai jos pentru a obține un adevărat simplu ca ieșire:

$ ./Test.py-p

Dacă rulați scriptul fără argumentul -p, va fi atribuită o valoare falsă. Valoarea store_true a cuvântului cheie acțiune atribuie o valoare True variabilei print_string ori de câte ori argumentul -p este specificat în mod explicit, altfel False este atribuit variabilei.

Exemplul 5: Tratați valorile argumentelor ca listă

Dacă doriți să obțineți mai multe valori simultan și să le stocați în listă, trebuie să furnizați cuvânt cheie nargs în următorul format:

importargparse

analizor =argparse.ArgumentParser(Descriere=„Un program de testare”.)

analizor.add_argument(„-p”, '--print_string', Ajutor=„Tipărește argumentul furnizat.”,nargs=„*”)

argumente= analizor.parse_args()

imprimare(argumente.print_string)

Rulați următoarea comandă pentru a testa codul de mai sus:

$ ./Test.py-p a b

Ar trebui să obțineți o astfel de ieșire:

['a', 'b']

Concluzie

Modulul argparse este destul de complet, cu o mulțime de opțiuni pentru a modifica comportamentul aplicațiilor din linia de comandă și pentru a analiza valorile furnizate de utilizator. Aceste exemple ating doar utilizarea de bază a modulului argparse. Pentru aplicații avansate și complexe, este posibil să aveți nevoie de implementări diferite. Viziteaza documentație oficială pentru o explicație completă a modulului.