Hur man skapar egna kommandoradsprogram i Python With Click

Hur man skapar egna kommandoradsprogram i Python With Click / Programmering

Klicka på ett Python-paket för att skriva kommandoradsgränssnitt. Den producerar vacker dokumentation för dig och låter dig bygga kommandoradsgränssnitt i så lite som en rad kod. Kort sagt: det är fantastiskt och kan hjälpa till att ta dina program till nästa nivå.

Så här kan du använda den för att förbättra dina Python-projekt.

Skriva kommandoradsprogram utan klick

Det är möjligt att skriva kommandoradsprogram utan att använda Click, men det kräver mer ansträngning och mycket mer kod. Du måste analysera kommandoradsargument, utföra validering, utveckla logik för att hantera olika argument och skapa en anpassad hjälpmeny. Vill du lägga till ett nytt alternativ? Du kommer då att ändra din hjälpfunktion.

Det är inget fel med att skriva din egen kod, och det är ett bra sätt att lära sig Python, men Click kan du följa “Repetera inte dig själv” (DRY) principer. Utan Klick skriver du kod som är bräcklig och kräver mycket underhåll när det ändras.

Här är ett enkelt kommandoradsgränssnitt kodat utan Klicka:

import sys import slumpmässigt def do_work (): "" "Funktion för att hantera kommandoradsanvändning" "" args = sys.argv args = args [1:] # Första elementet av args är filnamnet om len (args) == 0 : print ('Du har inte skickat några kommandon i!') annars: för en i args: om en == '--help': print ('Basic command line program') print ('Options:') print --help -> visa denna grundläggande hjälpmeny. ') print (' - monty -> visa ett Monty Python citat. ') print (' --veg -> visa en slumpmässig grönsak ') elif a ==' monty ': print (' Vad är det här då? 'Romanes eunt domus'? Folk kallas romerska, går de, huset? ') elif a ==' --veg ': print (random.choice ([' Morot "," potatis "," rotta "])) annat: skriv ut ('Oigenkänt argument.') Om __name__ == '__main__': do_work ()

Dessa 27 linjer Python fungerar bra men är väldigt bräckliga. Alla ändringar som du gör i ditt program kommer att behöva massor av annan stödjande kod att ändra. Om du ändrar ett argumentnamn behöver du uppdatera hjälpinformationen. Denna kod kan enkelt växa utan kontroll.

Här är samma logik med Klicka:

Importera klicka Importera slumpmässigt @ click.command () @ click.option ('- monty', default = False, help = "Visa ett Monty Python citat.") @ click.option ('- veg', default = False , help = "Visa en slumpmässig grönsak.") def do_work (monty, veg): "" "Basic Click exemplet kommer att följa dina kommandon" "" om monty: print ('Vad är det här då?' Romanes eunt domus "? Folk som heter romer, går de, huset?") Om veg: skriv ut (random.choice (['Carrot', 'Potato', 'Turnip'])) om __name__ == '__main__': do_work ()

Detta Click-exemplet implementerar samma logik i 16 kodrubriker. Argumenten analyseras för dig, och hjälpskärmen genereras:

Denna grundläggande jämförelse visar hur mycket tid och ansträngning du kan spara genom att använda program som klick. Medan kommandoradsgränssnittet kan visas samma för slutanvändaren är den underliggande koden enklare, och du sparar mycket tidskodning. Eventuella förändringar eller uppdateringar som du skriver i framtiden kommer också att se betydande utvecklingstidsökningar.

Komma igång med Klicka för Python

Innan du använder Click kan du önska att konfigurera en virtuell miljö. Lär dig hur du använder Pythons virtuella miljö. Lär dig hur du använder Pythons virtuella miljö. Oavsett om du är en erfaren Python-utvecklare eller har du precis börjat, lär dig hur du installerar en virtuell miljö är viktigt för alla Python-projekt. Läs mer . Detta kommer att stoppa dina Python-paket i konflikt med ditt Python-system eller andra projekt du kanske arbetar med. Du kan också försöka Python i din webbläsare Prova Python i din webbläsare Med dessa gratis online interaktiva skalen Prova Python i din webbläsare Med dessa gratis online interaktiva shells Oavsett om du går igenom Python-exemplen eller granskar grunderna i arrays och listor kan du testa koden direkt i din webbläsare. Här är de bästa Python tolkarna vi hittat. Läs mer om du vill leka med Python och Click.

Slutligen försäkra dig om att du kör Python version 3. Det är möjligt att använda Click med Python version 2, men dessa exempel finns i Python 3. Läs mer om skillnaderna mellan Python 2 och Python 3.

När du är redo, installera Klicka på kommandoraden med hjälp av PIP (hur man installerar PIP för Python):

pip installera klick

Skriva ditt första klickprogram

I en textredigerare börjar du med att importera Klicka:

Importera klick

När du har importerat skapar du en metod och a huvud inkörsport. Vår Python OOP guide täcker dem mer i detalj, men de ger plats för att lagra din kod och ett sätt för Python att börja köra det:

Importera klick Importera slumpmässiga def veg (): "" "Grundläggande metod returnerar ett slumpmässigt vegetabiliskt" "utskrift (random.choice (['Carrot', 'Potato', 'Turnip', 'Parsnip'])) om __name__ = = '__main__': veg ()

Detta mycket enkla skript kommer att mata ut en slumpmässig grönsak. Din kod kan se annorlunda ut, men det här enkla exemplet är perfekt att kombinera med Click.

Spara detta som click_example.py, och kör sedan den i kommandoraden (efter att du har navigerat till dess plats):

python click_example.py

Du bör se ett slumpmässigt vegetabiliskt namn. Låt oss förbättra saker genom att lägga till Klicka. Ändra din kod för att inkludera Click decorators och a för slinga:

@ click.command () @ click.option ('- total', default = 3, help = "Antal grönsaker att mata ut.") def veg (totalt): "" "Grundmetoden returnerar en slumpmässig grönsak" "för antal i intervallet (totalt): skriv ut (random.choice (['Carrot', 'Potato', 'Turnip', 'Parsnip'])) om __name__ == '__main__': veg

Vid körning ser du en slumpmässig grönsak som visas tre gånger.

Låt oss bryta ned dessa förändringar. De @ Click.command () dekoratörkonfigurationer Klicka för att arbeta med funktionen direkt efter dekoratorn. I detta fall är det här veg () fungera. Du behöver detta för varje metod du vill använda med klicka.

De @ click.option dekoratorn konfigurerar klicka för att acceptera parametrar från kommandoraden, som den kommer att övergå till din metod. Det finns tre argument som används här:

  1. -total: Detta är kommandoradsnamnet för total argument.
  2. standard: Om du inte anger det totala argumentet när du använder ditt skript, kommer klicka på Använd värdet från standard.
  3. hjälp: En kort mening som beskriver hur du använder ditt program.

Låt oss se Klicka i åtgärd. Från kommandoraden kör du ditt skript, men passerar i total argument så här:

python click_example.py - totalt 10

Genom att sätta -totalt 10 från kommandoraden skrivs ditt skript tio slumpmässiga grönsaker.

Om du passerar in i -hjälp flagga, så får du se en bra hjälpsida, tillsammans med de alternativ du kan använda:

python click_example.py --hjälp

Lägga till fler kommandon

Det är möjligt att använda många Click decorators på samma funktion. Lägg till ett annat klickalternativ till veg fungera:

@ click.option ('- gravy', default = False, help = "Lägg till" med gravy "till grönsakerna.")

Glöm inte att överföra detta till metoden:

def veg (totalt sås):

Nu när du kör din fil kan du passera i sås flagga:

python click_example.py --gravy y

Hjälpskärmen har också ändrats:

Här är hela koden (med lite mindre refactoring för nyhet):

Importera klick Importera slumpmässigt @ click.command () @ click.option ('- gravy', default = False, help = "Lägg till" med gravy "till grönsakerna.") @ click.option ('- total' default = 3, help = "Antal grönsaker som ska matas ut.") def veg (totalt sås): "" "Grundmetoden returnerar en slumpmässig grönsak" "" för antal i intervallet (totalt): choice = random.choice ['Carrot', 'Potato', 'Turnip', 'Parsnip']) om gravy: skriv ut (f 'choice med gravy') annat: skriv ut (val) om __name__ == '__main__': veg

Ännu fler klickalternativ

När du väl vet grunderna kan du börja titta på mer komplexa klickalternativ. I det här exemplet lär du dig att skicka i flera värden till ett enda argument, vilket Click kommer att konvertera till en tuple. Du kan lära dig mer om tuples i vår guide till Python-ordlistan.

Skapa en ny fil som heter click_example_2.py. Här är startkoden du behöver:

importera klick import slumpmässig @ click.command () def add (): "" "Grundläggande metod lägger till två nummer tillsammans." "" överför om __name__ == '__main__': add ()

Det finns inget nytt här. Den tidigare delen förklarar denna kod i detalj. Lägg till en @ click.option kallad tal:

@ click.option ('- numbers', nargs = 2, typ = int, help = "Lägg till två nummer tillsammans.")

Den enda nya koden här är nargs = 2, och den typ = int alternativ. Detta berättar Klicka för att acceptera två värden för tal alternativet, och att de måste vara av typtal. Du kan ändra detta till valfritt nummer eller (giltig) datatyp du vill ha.

Ändra ändå Lägg till metod för att acceptera tal argument, och gör lite bearbetning med dem:

def add numbers: "" "Basic-metoden kommer att lägga till två nummer tillsammans." "" resultat = nummer [0] + nummer [1] resultat')

Varje värde du skickar in är tillgängligt via tal objekt. Så här använder du det på kommandoraden:

python click_example_2.py - nummer 1 2

Klicka på Är lösningen för Python Utilities

Som du har sett är Click lätt att använda men mycket kraftfull. Medan dessa exempel endast täcker de grundläggande grunderna i Click, finns det många fler funktioner du kan lära dig om nu att du har ett bra grepp om grunderna.

Om du letar efter några Python-projekt för att träna din nya funktionalitet med, varför inte lära dig att styra en Arduino med Python Hur man programmerar och kontrollerar en Arduino med Python Hur man programmerar och kontrollerar en Arduino med Python Det är tyvärr omöjligt att direkt programmera en Arduino i Python, men du kan styra den över USB med ett Python-program. Här är hur. Läs mer, eller hur man läser och skriver till Google Sheets med Python Hur man läser och skriver till Google Sheets med Python Så här läser och skriver du till Google Sheets Med Python Python kan tyckas konstigt och ovanligt, men det är lätt att lära och använda. I den här artikeln visar jag dig hur du läser och skriver till Google Sheets med Python. Läs mer ? Endera av dessa projekt skulle vara perfekt för att konvertera till Click!

Utforska mer om: Kodningstutorials, Python.