Den beste måten å lage kommandolinjegrensesnitt i Python

Slik skriver du brukervennlige, intuitive Python-programmer

Kommandolinjegrensesnitt (CLI):

Et kommandolinjegrensesnitt eller kommandospråktolk, også kjent som et kommandolinjebrukergrensesnitt, konsollbrukergrensesnitt og karakterbrukergrensesnitt, er et middel til å samhandle med et dataprogram hvor brukeren gir en kommando til programmet i form av påfølgende tekstlinjer.

Du kan gjøre programmet ditt kraftig og interaktivt ved å lage et kommandolinjegrensesnitt (CLI). En CLI lar deg ta inn kommandolinjeargumenter (informasjon som følger programmets navn på kommandolinjen til operativsystemet) for å legge til flere funksjoner i programmet ditt, noe som gjør koden din både enkel å bruke og fleksibel. Avhengig av programmet, kan disse argumentene brukes til å legge til flere funksjoner som visning av hjelpedokumentasjon, spesifisering av en utdatafil eller aktivering av testfunksjoner som kan være buggy for normal bruk.

Da jeg først begynte å programmere i Python, samlet jeg nesten utelukkende brukerinnspill interaktivt som dette:

def main ():
    first = input (“Skriv inn fornavnet:”)
    last = input ("Skriv inn etternavnet:")
    print (første + '' + sist)

Selv om denne koden er bra for enkle skript, er den problematisk av noen få grunner. For det første er denne koden ikke fleksibel. Når en bruker kjører dette programmet, er de begrenset til bare et enkelt sett med definerte regler. Hva, for eksempel, hvis jeg i stedet for å skrive ut til konsollen, ville logge utdataene til en tekstfil? Hvordan finner jeg ut som en ny bruker hvordan programmet fungerer? Som utvikler kan du opprette et kommandolinjegrensesnitt for å tilby en løsning på disse problemene.

Viktige hensyn

Når du oppretter en CLI, er det viktig å vurdere følgende:

  1. Nødvendige argumenter: Hvilke argumenter er absolutt nødvendige for at programmet skal kunne kjøres? Hvis jeg for eksempel skriver et program for å skrape en webside, kan et nødvendig argument være sidens domene.
  2. Dokumentasjon: Det er viktig å skrive ut funksjonen til hvert alternativ og argument slik at en ny bruker kan finne ut hvordan programmet ditt fungerer.
  3. Håndter feilfeil: La brukeren vite nøyaktig hva som gikk galt og hvor
  4. Kjørestatus: Hvis oppgaven ikke fullføres umiddelbart, bør du skrive ut gjeldende fremdrift

Lese argumenter ved hjelp av argparse

Argparse er en Python standard bibliotekmodul for å analysere kommandolinjeargumenter. Du som programmerer kan definere argumentene som skal tas, og argparse vil finne ut hvordan du kan analysere dem fra sys.argv (en liste i Python, som inneholder kommandolinjeargumentene som er sendt til skriptet, lære mer her). Argparse genererer også automatisk hjelp- og bruksmeldinger og gir feil når brukere gir programmet ugyldige argumenter. Det er veldig enkelt å bruke og gjør det veldig enkelt å skrive intuitive CLI-er.

For å komme i gang oppretter du en ny fil som heter test_cli.py og importerer modulen og initialiserer en ny parser:

importer argparse
parser = argparse.ArgumentParser ()
parser.parse_args ()

Kjør nå koden med - hjelpealternativet:

python3 test_cli.py - hjelp

Du bør motta en fin standard hjelpemelding som denne:

bruk: test_cli.py [-h]
valgfrie argumenter:
    -h, --hjelp vise denne hjelpemeldingen og avslutt

Gratulerer, du har nettopp laget ditt første kommandolinjegrensesnitt!

La oss nå legge til en velkomstmelding for å fortelle brukeren din om hva programmet gjør:

Welcome = "Øve på å lage interaktive kommandolinjegrensesnitt"
parser = argparse.ArgumentParser (beskrivelse = velkommen)
parser.parse_args ()

Kjør nå programmet med -h flagget. Du bør kunne se den smarte velkomstmeldingen.

La oss gjøre noe mer nyttig.

Legge til argumenter

Anta at vi skriver et program for å skrape en webside. Noen argumenter vi kan trenge er domenet til nettsiden - domene eller -d, muligheten til å logge utdata til en ut-fil - fil eller -o, og kanskje muligheten til å skrive ut et bestemt antall linjer med utdata til konsollen - linjer eller -l. For dette eksemplet lager vi det nødvendige domeneargumentet, mens argumenter for fil og linjer vil være valgfrie.

Vi kan enkelt legge til flere argumenter til en argparse CLI ved å bruke .add_argument som lar oss definere bruksdetaljer. Vi kan legge til det nødvendige argumentet - domene som sådan:

parser.add_argument ('- domene', '-d', påkrevd = True, help = 'domenenavnet til nettstedet du vil skrape. dvs. "https://ahadsheriff.com"')

Kjør nå programmet med -h-argumentet for å se dokumentasjonen du skrev!

Siden --domene er et nødvendig argument, kan du prøve å kjøre programmet uten flagg, og du vil bli behandlet på følgende melding:

bruk: test_cli.py [-h] - domene DOMAIN
test_cli.py: feil: følgende argumenter kreves: - domene / -d

Det fungerer!

På tide å legge til tilleggsargumentene våre ved hjelp av argparse. Hvis du ikke spesifiserer hvilke argumenter som kreves, vil argparse anta at de er valgfrie. Du kan også angi type argument, for - linjer vil vi ta et helt tall. Det er andre nyttige alternativer du kan angi for .add_argument— for eksempel action = - som du kan lære mer om i den offisielle argparse-dokumentasjonen her.

parser.add_argument ('- ofile', '-o', help = 'definere utdatafil for å lagre resultater av stdout. dvs. "output.txt"')
parser.add_argument ('- linjer', '-l', help = 'antall linjer med utskrifter som skal skrives ut til konsollen' ', type = int)

Test nå koden din for å forsikre deg om at alt fungerer som det skal. En enkel måte å gjøre dette på er ved å lagre verdiene til argumentene som variabler og deretter skrive ut disse verdiene.

args = parser.parse_args ()
domene = args.domene
ofile = args.ofile
linjer = args.lines
print ("domene:", domene)
print ("utdatafil:", ofile)
print ("linjer:", linjer)

Merk: valgfrie argumenter lagres som Ingen som standard når de ikke er i bruk.

Her er all koden min:

For å konkludere

Selv om dette ikke er en omfattende guide, bør det være nok til å få deg til å tenke på kommandolinjegrensesnitt og forbedre brukeropplevelsen til skriptene dine. Når alt kommer til alt, hva er poenget med koden hvis ingen klarer å bruke den. Hvis du har flere anbefalinger, tips eller ressurser, kan du dele i kommentarene!

Takk for at du leste! Hvis du likte det, må du huske å knuse den følgende knappen :) Sørg også for å sjekke ut nettstedet mitt, Twitter, LinkedIn og Github.