Hur du skapar dina egna kommandoradsprogram i Python med klick
Annons
Click är ett Python-paket för att skriva kommandoradsgränssnitt. Den producerar vacker dokumentation för dig och låter dig bygga kommandoradsgränssnitt på så lite som en kodrad. Kort sagt: det är fantastiskt och kan hjälpa dig att ta dina program till nästa nivå.
Så här kan du använda det för att liva upp dina Python-projekt.
Skriva kommandoradsprogram utan klick
Det är möjligt att skriva kommandoradsprogram utan att använda Click, men att göra 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 bygga en anpassad hjälpmeny. Vill du lägga till ett nytt alternativ? Du kommer att ändra din hjälpfunktion då.
Det finns inget fel med att skriva din egen kod, och att göra det är ett bra sätt att lära sig Python, men Click låter dig följa principerna "Don't Repeat Yourself" (DRY). Utan klick skriver du kod som är ömtålig och kräver mycket underhåll varje gång ändringar sker.
Här är ett enkelt kommandoradsgränssnitt kodat utan klick:
import sys import random def do_work(): """ Function to handle command line usage""" args = sys.argv args = args[1:] # First element of args is the file name if len(args) == 0: print('You have not passed any commands in!') else: for a in args: if a == '--help': print('Basic command line program') print('Options:') print(' --help -> show this basic help menu.') print(' --monty -> show a Monty Python quote.') print(' --veg -> show a random vegetable') elif a == '--monty': print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?') elif a == '--veg': print(random.choice(['Carrot', 'Potato', 'Turnip'])) else: print('Unrecognised argument.') if __name__ == '__main__': do_work()
Dessa 27 linjer med Python fungerar bra men är mycket ömtåliga. Alla ändringar du gör i ditt program kommer att behöva massor av annan stödjande kod för att ändra. Om du ändrar ett argumentnamn måste du uppdatera hjälpinformationen. Den här koden kan enkelt växa ur kontroll.
Här är samma logik med Click:
import click import random @click.command() @click.option('--monty', default=False, help='Show a Monty Python quote.') @click.option('--veg', default=False, help='Show a random vegetable.') def do_work(monty, veg): """ Basic Click example will follow your commands""" if monty: print('What\'s this, then? "Romanes eunt domus"? People called Romanes, they go, the house?') if veg: print(random.choice(['Carrot', 'Potato', 'Turnip'])) if __name__ == '__main__': do_work()
Detta klickexempel implementerar samma logik i 16 kodrader. Argumenten analyseras för dig och hjälpfönstret genereras:
Denna grundläggande jämförelse visar hur mycket tid och ansträngning du kan spara genom att använda program som Click. Även om kommandoradsgränssnittet kan se ut samma för slutanvändaren, är den underliggande koden enklare och du sparar massor av tidskodning. Eventuella ändringar eller uppdateringar du skriver i framtiden ser också betydande utvecklingstidsökningar.
Komma igång med Klicka för Python
Innan du använder Click, kanske du vill konfigurera en virtuell miljö. Lär dig använda Python virtuella miljö Lär dig använda Python virtuella miljö Oavsett om du är en erfaren Python-utvecklare, eller om du bara är igång, lära dig hur du installerar en virtuell miljö är viktigt för alla Python-projekt. Läs mer . Detta kommer att stoppa dina Python-paket som står i konflikt med ditt system Python eller andra projekt som du kanske arbetar med. Du kan också prova Python i din webbläsare Prova Python i din webbläsare med dessa gratis online interaktiva skal Testa Python i din webbläsare med dessa gratis online interaktiva skal Oavsett om du går igenom dessa Python-exempel eller granska grunderna i matriser och listor kan du testa koden direkt i din webbläsare. Här är de bästa Python-tolkarna online som vi har hittat. Läs mer om du vill leka med Python och Klicka.
Slutligen, se till 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 klar installerar du Klicka från kommandoraden med PIP (hur du installerar PIP för Python):
pip install click
Skriva ditt första klickprogram
Börja med att importera i en textredigerare Klicka:
import click
När du har importerats skapar du en metod och en huvudinmatningspunkt. Vår Python OOP-guide täcker dessa mer detaljerat, men de ger en plats att lagra din kod och ett sätt för Python att börja köra den:
import click import random def veg(): """ Basic method will return a random vegetable""" print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip'])) if __name__ == '__main__': veg()
Detta mycket enkla skript kommer att ge en slumpmässig grönsak. Din kod kan se annorlunda ut, men detta enkla exempel är perfekt att kombinera med Click.
Spara detta som click_example.py och kör det sedan i kommandoraden (efter att ha navigerat till dess plats):
python click_example.py
Du bör se ett slumpmässigt grönsaknamn. Låt oss förbättra saker genom att lägga till Click. Ändra din kod så att du inkluderar Click Decorators och en for loop:
@click.command() @click.option('--total', default=3, help='Number of vegetables to output.') def veg(total): """ Basic method will return a random vegetable""" for number in range(total): print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip'])) if __name__ == '__main__': veg()
När du kör ser du en slumpmässig grönsak som visas tre gånger.
Låt oss dela upp dessa förändringar. Dekoratören @ click.command () konfigurerar Klicka för att arbeta med funktionen omedelbart efter dekoratören. I det här fallet är detta veg () -funktionen. Du behöver detta för varje metod du vill använda med Click.
@ Click.option- dekoratören konfigurerar klick för att acceptera parametrar från kommandoraden, som den kommer att överföra till din metod. Det finns tre argument som används här:
- –Total: Detta är kommandoradens namn för det totala argumentet.
- standard: Om du inte anger det totala argumentet när du använder ditt skript använder Click värdet från standard.
- hjälp: En kort mening som förklarar hur du använder ditt program.
Låt oss se Klicka i handling. Kör ditt skript från kommandoraden, men mata in det totala argumentet så här:
python click_example.py --total 10
Genom att ställa in –total 10 från kommandoraden kommer ditt skript att skriva ut tio slumpmässiga grönsaker.
Om du passerar i –hjälpsflaggan ser du en trevlig hjälpsida tillsammans med alternativen du kan använda:
python click_example.py --help
Lägga till fler kommandon
Det är möjligt att använda många klickdekoratörer på samma funktion. Lägg till ett annat klickalternativ till vegfunktionen :
@click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.')
Glöm inte att överföra detta till metoden:
def veg(total, gravy):
Nu när du kör din fil kan du skicka in sås flaggan:
python click_example.py --gravy y
Hjälpskärmen har också ändrats:
Här är hela koden (med lite mindre refactoring för finhet):
import click import random @click.command() @click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.') @click.option('--total', default=3, help='Number of vegetables to output.') def veg(total, gravy): """ Basic method will return a random vegetable""" for number in range(total): choice = random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip']) if gravy: print(f'{choice} with gravy') else: print(choice) if __name__ == '__main__': veg()
Ännu fler klickalternativ
När du känner till grunderna kan du börja titta på mer komplexa klickalternativ. I det här exemplet lär du dig att överföra flera värden till ett enda argument, som klickar om till en tupel. Du kan lära dig mer om tuples i vår guide till Python-ordboken.
Skapa en ny fil som heter click_example_2.py . Här är startkoden du behöver:
import click import random @click.command() def add(): """ Basic method will add two numbers together.""" pass if __name__ == '__main__': add()
Det finns inget nytt här. Det föregående avsnittet förklarar den här koden i detalj. Lägg till ett @ click.option som heter nummer :
@click.option('--numbers', nargs=2, type=int, help='Add two numbers together.')
Den enda nya koden här är nargs = 2 och alternativen typ = int . Detta berättar Klicka för att acceptera två värden för numret alternativet, och att de båda måste vara av heltal av typen. Du kan ändra detta till valfritt nummer eller (giltig) datatyp.
Slutligen ändrar du tilläggsmetoden för att acceptera talargumentet och gör en del behandling med dem:
def add(numbers): """ Basic method will add two numbers together.""" result = numbers[0] + numbers[1] print(f'{numbers[0]} + {numbers[1]} = {result}')
Varje värde som du skickar in är tillgängligt via nummerobjektet. Så här använder du det på kommandoraden:
python click_example_2.py --numbers 1 2
Klicka på Är lösningen för Python-verktyg
Som du har sett är Click lätt att använda men mycket kraftfullt. Medan dessa exempel bara täcker de grunderna i Click, finns det många fler funktioner du kan lära dig om nu när du har ett bra grepp om grunderna.
Om du letar efter några Python-projekt att träna dina nya färdigheter med, varför inte lära dig att kontrollera en Arduino med Python Hur man programmerar och styr en Arduino med Python Hur man programmerar och kontrollerar en Arduino med Python Tyvärr är det omöjligt för 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 kan du läsa och skriva till Google Sheets med Python Hur man läser och skriver till Google Sheets With Python Hur man läser och skriver till Google Sheets With Python Python kan verka konstigt och ovanligt, men det är lätt att lära sig 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 ? Ett av dessa projekt skulle vara perfekt för att konvertera till Click!
Utforska mer om: Coding Tutorials, Python.