Argparse TutorialA¶

Denne oppl ringen er ment a v re en forsiktig introduksjon til argparse, den anbefalte kommandolinjeparsingmodulen i Python standardbiblioteket.

Det er to andre moduler som oppfyller samme oppgave, nemlig getopt (et ekvivalent for getopt () fra C-spraket) og den avviklede optparse. V r ogsa oppmerksom pa at argparse er basert pa optparse, og derfor veldig likt nar det gjelder bruk.

La oss vise hvilken funksjonalitet vi skal utforske i denne innledende veiledningen ved a benytte ls-kommandoen:

Noen fa begreper vi kan l re av de fire kommandoene:

Kommandoen ls er nyttig nar du kjorer uten noen alternativer i det hele tatt. Det er som standard a vise innholdet i gjeldende katalog. Hvis vi vil ha det som standard, forteller vi det litt mer. I dette tilfellet vil vi at den skal vise en annen katalog, pypy. Det vi gjorde er a spesifisere det som er kjent som et posisjonsargument. Det heter det fordi programmet burde vite hva du skal gjore med verdien, utelukkende basert pa hvor den vises pa kommandolinjen. Dette konseptet er mer relevant for en kommando som cp, hvis mest grunnleggende bruk er cp SRC DEST. Den forste posisjonen er det du vil kopiere, og den andre posisjonen er hvor du vil kopiere den til. Na, si vi vil endre oppforselen til programmet. I vart eksempel viser vi mer info for hver fil i stedet for bare a vise filnavnene. -l i sa fall er kjent som et valgfritt argument. Det er en utdrag av hjelpeteksten. Det er veldig nyttig ved at du kan komme over et program du aldri har brukt for, og kan finne ut hvordan det fungerer ved a lese hjelpeteksten.

Grunnleggende

La oss starte med et veldig enkelt eksempel som gjor (nesten) ingenting:

Folgende er et resultat av a kjore koden:

Her er hva som skjer:

Kjorer skriptet uten noen alternativer resulterer i ingenting som vises til stdout. Ikke sa nyttig. Den andre begynner a vise bruken av Argparse-modulen. Vi har gjort nesten ingenting, men allerede far vi en fin hjelpemelding. Alternativet –hjelp, som ogsa kan forkortes til -h, er det eneste alternativet vi far gratis (det vil si ikke a spesifisere det). Angi noe annet resulterer i en feil. Men selv da far vi en nyttig brukermelding, ogsa gratis.

Innforing Posisjonelle argumenter

Og kjorer koden:

Her er hva som skjer:

Vi har lagt til metoden add_argument (), som vi bruker til a angi hvilke kommandolinjealternativer programmet er villig til a akseptere. I dette tilfellet har jeg navnet det ekko slik at det er i trad med sin funksjon. A ringe vart program krever na at vi oppgir et alternativ. Metoden parse_args () returnerer faktisk noen data fra de angitte alternativene, i dette tilfellet ekko. Variabelen er en form for «magic†™» som argparse utforer gratis (det vil si ikke a spesifisere hvilken variabel den verdien er lagret i). Du vil ogsa legge merke til at dets navn samsvarer med strengargumentet gitt til metoden, ekko.

V r oppmerksom pa at selv om hjelpeskjermen ser bra ut og alt, er det for oyeblikket ikke sa nyttig som det kan v re. For eksempel ser vi at vi fikk ekko som et posisjonsargument, men vi vet ikke hva det gjor, annet enn ved a gjette eller ved a lese kildekoden. Sa, la oss gjore det litt mer nyttig:

Na, hva med a gjore noe enda mer nyttig:

Folgende er et resultat av a kjore koden:

Det gikk ikke sa bra. Det er fordi Argparse behandler alternativene vi gir det som strenge, med mindre vi forteller det ellers. Sa, la oss si argparse a behandle den innspillingen som et heltall:

Folgende er et resultat av a kjore koden:

Det gikk bra. Programmet avsluttes na til og med med darlig ulovlig inngang for du fortsetter.

Innforing av valgfrie argumenter

Sa langt har vi spilt med posisjonsargumenter. La oss se pa hvordan du legger til valgfrie:

Her er hva som skjer:

Programmet er skrevet slik at det vises noe nar – forbositet er angitt og ikke vises nar ikke. For a vise at alternativet er faktisk valgfritt, er det ingen feil nar du kjorer programmet uten det. Merk at hvis et valgfritt argument ikke brukes, blir den aktuelle variabelen, i dette tilfellet args.verbosity, gitt Ingen som en verdi, som er grunnen til at den mislykkes sanntest av if-setningen. Hjelpemeldingen er litt annerledes. Nar du bruker alternativet –verbosity, ma du ogsa spesifisere noen verdi, hvilken som helst verdi.

Eksempelet ovenfor aksepterer vilkarlig heltallverdier for –verbosity, men for vart enkle program er bare to verdier faktisk nyttige, True eller False. La oss endre koden tilsvarende:

Her er hva som skjer:

Alternativet er na mer av et flagg enn noe som krever en verdi. Vi endret selv navnet pa alternativet for a matche den ideen. V r oppmerksom pa at vi na angir et nytt sokeord, handling og gir det verdien «store_true» . Dette betyr at hvis alternativet er spesifisert, tilordne verdien True to args.verbose. Ikke a spesifisere det inneb rer False. Det klager nar du angir en verdi, i sann and av hvilke flagg faktisk er. Legg merke til den forskjellige hjelpeteksten.

Korte alternativer

Hvis du er kjent med kommandolinjebruk, vil du legge merke til at jeg enna ikke har rort pa emnet for korte versjoner av alternativene. Det er ganske enkelt:

Legg merke til at den nye evnen ogsa reflekteres i hjelpeteksten.

Kombinere Positive og Valgfrie argumenter

Vart program fortsetter a vokse i kompleksitet:

Og na produksjonen:

Vi har brakt tilbake et posisjonsargument, derfor klagen. Legg merke til at bestillingen ikke har betydning.

Hva med a gi dette programmet vart tilbake muligheten til a ha flere verbositetsverdier, og faktisk fa dem til a bruke dem:

Disse ser alle bra ut, utenom den siste, som avslorer en feil i vart program. La oss reparere det ved a begrense verdiene som -verbosity-alternativet kan akseptere:

V r oppmerksom pa at endringen ogsa gjenspeiler bade feilmeldingen og hjelpestrengen.

Na, la oss bruke en annen tiln rming til a spille med verbositet, noe som er ganske vanlig. Den matcher ogsa maten CPython kjorbar handterer sitt eget verbositetsargument (sjekk utgangen av python – help):

Vi har introdusert en annen handling, antall, for a telle antall forekomster av en bestemt valgfri argumentasjon:

Ja, det er na mer av et flagg (ligner pa handling = «store_true») i den forrige versjonen av skriptet vart. Det burde forklare klagen. Det oppforer seg ogsa ligner pa «action» -handling. Na er det en demonstrasjon av hva handlingsplanen gir. Du har sikkert sett denne typen bruk for. Og hvis du ikke spesifiserer -v-flagget, anses dette flagget for a ha ingen verdi. Som det bor forventes, ma vi angi den lange form for flagget, og vi ma fa samme utgang. Dessverre er var hjelpefunksjon ikke veldig informativ om den nye muligheten vart skript har oppnadd, men det kan alltid loses ved a forbedre dokumentasjonen for skriptet vart (for eksempel via hjelpesokeordet). Den siste produksjonen avslorer en feil i vart program.

Og dette er hva det gir:

Forste utgang gikk bra, og fikserer feilen vi hadde for. Det vil si at vi vil ha noen verdi & gt; = 2 for a v re sa oversette som mulig. Tredje utgang ikke sa bra.

La oss fikse den feilen:

We†™ ve bare introdusert enda et sokeord, standard. Vi har satt det til 0 for a gjore det sammenlignbart med de andre intverdiene. Husk at hvis et valgfritt argument ikke er oppgitt, blir det som standard ingen verdi, og det kan ikke sammenlignes med en int-verdi (dermed TypeError-unntaket).

Du kan ga ganske langt bare med det vi har l rt sa langt, og vi har bare riper overflaten. Argparse-modulen er veldig kraftig, og vi vil utforske litt mer av det for vi avslutter denne oppl ringen.

Fa litt mer avansert

Hva om vi onsket a utvide vart lille program for a utfore andre krefter, ikke bare firkanter:

Legg merke til at vi sa langt har brukt benoysniva for a endre teksten som blir vist. Folgende eksempel bruker istedet verbositetsniva for a vise mer tekst i stedet:

Konflikt alternativer

Sa langt har vi jobbet med to metoder for en argparse.ArgumentParser-forekomst. La oss innfore en tredje, add_mutually_exclusive_group (). Det gir oss mulighet til a angi alternativer som er i konflikt med hverandre. La oss ogsa endre resten av programmet slik at den nye funksjonaliteten gir mer mening: vi vil introdusere –quiet-alternativet, som vil v re det motsatte av den -verbose en:

Vart program er na enklere, og vi har mistet noen funksjonalitet for demonstrasjons skyld. Uansett, her er utgangen:

Det skal v re lett a folge. Jeg har lagt til den siste utgangen, slik at du kan se hvilken fleksibilitet du far, det vil si blanding av lange skjemaer med kort form.

For vi konkluderer, vil du sannsynligvis fortelle brukerne hovedformalet med programmet ditt, bare hvis de ikke vet:

Merk at liten forskjell i bruksteksten. Legg merke til [-v | -q], som forteller oss at vi enten kan bruke -v eller -q, men ikke begge pa samme tid:

Conclusion¶

Argparse-modulen gir mye mer enn det som vises her. Dokumenterne er ganske detaljerte og grundige og fulle av eksempler. Etter a ha gatt gjennom denne oppl ringen, bor du enkelt fordoye dem uten a fole seg overveldet.

Innholdsfortegnelse.

Forrige emne.

Neste emne.

Navigasjon.

Python Software Foundation er et non-profit selskap. Vennligst doner.