Sådan opretter du dine egne kommandolinjeprogrammer i Python med klik
Reklame
Click er en Python-pakke til skrivning af kommandolinjegrænseflader. Det producerer smuk dokumentation for dig og giver dig mulighed for at oprette kommandolinjegrænseflader i så lidt som en kodelinje. Kort sagt: det er fantastisk og kan hjælpe med at tage dine programmer til det næste niveau.
Her er, hvordan du kan bruge det til at livne dine Python-projekter.
Skrivning af kommandolinjeprogrammer uden klik
Det er muligt at skrive kommandolinjeprogrammer uden at bruge Click, men at gøre det kræver større indsats og meget mere kode. Du skal analysere kommandolinjeargumenter, udføre validering, udvikle logik til at håndtere forskellige argumenter og oprette en brugerdefineret hjælpemenu. Vil du tilføje en ny mulighed? Du ændrer derefter din hjælpefunktion.
Der er ikke noget galt i at skrive din egen kode, og at gøre det er en fantastisk måde at lære Python, men Click giver dig mulighed for at følge principperne om "Gentag ikke dig selv". Uden klik skriver du kode, der er skrøbelig og kræver masser af vedligeholdelse, når der sker ændringer.
Her er en simpel kommandolinjegrænseflade kodet uden Klik:
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()
Disse 27 linjer af Python fungerer godt, men er meget skrøbelige. Enhver ændring, du foretager i dit program, har brug for mange andre understøttelseskoder for at ændre. Hvis du ændrer et argumentnavn, skal du opdatere hjælpinformationen. Denne kode kan let vokse ud af kontrol.
Her er den samme 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()
Dette klikeksempel implementerer den samme logik i 16 kodelinjer. Argumenterne er parset for dig, og hjælpeskærmen genereres:
Denne grundlæggende sammenligning viser, hvor meget tid og kræfter du kan spare ved hjælp af programmer som f.eks. Click. Mens kommandolinjegrænsefladen muligvis vises den samme for slutbrugeren, er den underliggende kode enklere, og du sparer masser af tidskodning. Eventuelle ændringer eller opdateringer, du skriver i fremtiden, vil også se betydelige stigninger i udviklingstiden.
Kom godt i gang med Klik for Python
Inden du bruger Click, kan det være en god ide at konfigurere et virtuelt miljø Lær hvordan man bruger Python-virtuelle miljø Lær hvordan man bruger Python-virtuelle miljø Uanset om du er en erfaren Python-udvikler, eller du lige er i gang med at lære at konfigurere et virtuelt miljø er afgørende for ethvert Python-projekt. Læs mere . Dette vil stoppe dine Python-pakker, der er i konflikt med dit system Python eller andre projekter, du muligvis arbejder på. Du kan også prøve Python i din browser Prøv Python i din browser med disse gratis online interaktive skaller Prøv Python i din browser med disse gratis online interaktive skaller Uanset om du går igennem disse Python-eksempler eller gennemgår det grundlæggende i arrays og lister, kan du test koden lige i din browser. Her er de bedste online Python-tolke, vi har fundet. Læs mere, hvis du vil lege med Python og Klik.
Endelig skal du sikre dig, at du kører Python version 3. Det er muligt at bruge Click med Python version 2, men disse eksempler er i Python 3. Lær mere om forskellene mellem Python 2 og Python 3.
Når du er klar, skal du installere Klik fra kommandolinjen ved hjælp af PIP (hvordan du installerer PIP til Python):
pip install click
Skrivning af dit første klik-program
I en teksteditor skal du starte med at importere Klik:
import click
Når du er importeret, skal du oprette en metode og et hovedindgangspunkt . Vores Python OOP-guide dækker disse mere detaljeret, men de giver et sted at gemme din kode og en måde for Python at begynde at køre den på:
import click import random def veg(): """ Basic method will return a random vegetable""" print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip'])) if __name__ == '__main__': veg()
Dette meget enkle script giver en tilfældig grøntsag. Din kode kan se anderledes ud, men dette enkle eksempel er perfekt til at kombinere med Click.
Gem dette som click_example.py, og kør det derefter på kommandolinjen (efter at have navigeret til dets placering):
python click_example.py
Du skal se et tilfældigt vegetabilsk navn. Lad os forbedre tingene ved at tilføje Click. Skift din kode til at inkludere Click Decorators og 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ører, vil du se en tilfældig grøntsag vist tre gange.
Lad os fordele disse ændringer. Dekoratoren @ click.command () konfigurerer Klik for at arbejde med funktionen umiddelbart efter dekoratøren. I dette tilfælde er dette veg () -funktionen. Du har brug for dette til enhver metode, du gerne vil bruge med Click.
@ Click.option- dekoratøren konfigurerer klik for at acceptere parametre fra kommandolinjen, som det vil videresendes til din metode. Der er tre argumenter brugt her:
- –Total: Dette er kommandolinjens navn for det samlede argument.
- standard: Hvis du ikke angiver det samlede argument, når du bruger dit script, bruger Click værdien fra standard.
- hjælp: En kort sætning, der forklarer, hvordan du bruger dit program.
Lad os se Klik i handling. Kør dit script fra kommandolinjen, men indtast det samlede argument som dette:
python click_example.py --total 10
Ved at indstille –total 10 fra kommandolinjen, udskriver dit script ti tilfældige grøntsager.
Hvis du passerer i –hjælpeflagget, ser du en dejlig hjælpeside sammen med de muligheder, du kan bruge:
python click_example.py --help
Tilføjelse af flere kommandoer
Det er muligt at bruge mange Click-dekoratører på den samme funktion. Tilføj en anden klikfunktion til veg- funktionen:
@click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.')
Glem ikke at videregive dette til metoden:
def veg(total, gravy):
Når du kører din fil nu, kan du videregive skysflagget :
python click_example.py --gravy y
Hjælpeskærmen er også ændret:
Her er hele koden (med lidt mindre refactoring for pænhed):
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()
Endnu flere klikindstillinger
Når du har kendt det grundlæggende, kan du begynde at se på mere komplekse klikmuligheder. I dette eksempel lærer du, hvordan du overfører flere værdier til et enkelt argument, som Click konverterer til en tuple. Du kan lære mere om tuples i vores guide til Python-ordbogen.
Opret en ny fil kaldet click_example_2.py . Her er den startkode, du har brug for:
import click import random @click.command() def add(): """ Basic method will add two numbers together.""" pass if __name__ == '__main__': add()
Der er ikke noget nyt her. Det foregående afsnit forklarer denne kode detaljeret. Tilføj et @ click.option kaldet tal :
@click.option('--numbers', nargs=2, type=int, help='Add two numbers together.')
Den eneste nye kode her er nargs = 2 og type = int- indstillingerne. Dette fortæller Klik for at acceptere to værdier for indstillingen numre, og at de begge skal være af typen heltal. Du kan ændre dette til ethvert nummer eller (gyldig) datatype, du kan lide.
Endelig skal du ændre tilføjelsesmetoden for at acceptere talargumentet og foretage en vis 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}')
Hver værdi, du indtaster, er tilgængelig via nummerobjektet. Sådan bruges det på kommandolinjen:
python click_example_2.py --numbers 1 2
Klik på Er løsningen for Python-hjælpeprogrammer
Som du har set, er Click let at bruge, men meget kraftfuld. Selvom disse eksempler kun dækker de grundlæggende elementer i Click, er der mange flere funktioner, du kan lære om, nu når du har et solidt greb om det grundlæggende.
Hvis du leder efter nogle Python-projekter, du kan øve dine nye fundne færdigheder med, hvorfor ikke lære at kontrollere en Arduino med Python Sådan programmeres og styres en Arduino med Python Sådan programmeres og styres en Arduino med Python Desværre er det umuligt for direkte at programmere en Arduino i Python, men du kan kontrollere den over USB ved hjælp af et Python-program. Sådan gør du. Læs mere, eller hvad med at læse og skrive til Google Sheets med Python Sådan læses og skrives til Google Sheets With Python Sådan læses og skrives til Google Sheets With Python Python kan virke underligt og usædvanligt, men det er let at lære og bruge. I denne artikel viser jeg dig, hvordan du læser og skriver til Google Sheets vha. Python. Læs mere ? Ét af disse projekter ville være perfekte til konvertering til Click!
Udforsk mere om: Coding Tutorials, Python.