Hoe u uw eigen commandoregelprogramma's in Python kunt creëren met Click

Hoe u uw eigen commandoregelprogramma's in Python kunt creëren met Click / Programming

Click is een Python-pakket voor het schrijven van opdrachtregelinterfaces. Het produceert prachtige documentatie voor u en laat u opdrachtregelinterfaces bouwen in slechts één regel code. Kortom: het is geweldig en kan je programma's naar een hoger niveau tillen.

Hier leest u hoe u het kunt gebruiken om uw Python-projecten op te vrolijken.

Opdrachtregelprogramma's schrijven zonder klikken

Het is mogelijk om command line-programma's te schrijven zonder Click te gebruiken, maar dit vereist meer inspanning en veel meer code. U moet commandoregelargumenten parseren, validatie uitvoeren, logica ontwikkelen om verschillende argumenten te verwerken en een aangepast helpmenu bouwen. Wil je een nieuwe optie toevoegen? U wijzigt vervolgens uw helpfunctie.

Er is niets mis met het schrijven van je eigen code, en dat is een geweldige manier om Python te leren kennen, maar met Click kun je de “Do not Repeat Yourself” (DRY) principes. Zonder Click, zult u code schrijven die fragiel is en veel onderhoud vergt wanneer er veranderingen optreden.

Hier is een eenvoudige opdrachtregelinterface gecodeerd zonder klikken:

import sys import random def do_work (): "" "Functie om gebruik van opdrachtregel af te handelen" "" args = sys.argv args = args [1:] # Het eerste element van args is de bestandsnaam als len (args) == 0 : print ('U heeft geen opdrachten doorgegeven!') anders: voor a in args: als a == '--help': print ('Basic command line program') print ('Opties:') print (' --help -> toon dit basishulpmenu. ') print (' --monty -> toon een citaat van Monty Python. ') print (' --veg -> toon een willekeurige groente ') elif a ==' - monty ': print (' Wat is dit dan? 'Romanes eunt domus'? Mensen genaamd Romanes, they go, the house? ') elif a ==' --veg ': print (random.choice ([' Carrot ',' Potato ',' Turnip '])) else: print (' Unrecognized argument. ') If __name__ ==' __main__ ': do_work ()

Deze 27 lijnen van Python werken goed, maar zijn erg fragiel. Elke wijziging die u in uw programma aanbrengt, heeft veel andere ondersteunende code nodig om te veranderen. Als u een argumentnaam wijzigt, moet u de Help-informatie bijwerken. Deze code kan gemakkelijk uit de hand lopen.

Hier is dezelfde logica met Click:

importeren klik importeren willekeurig @ click.command () @ click.option ('- monty', standaard = False, help = "Toon een citaat van Monty Python.") @ click.option ('- veg', default = False , help = "Laat een willekeurige groente zien.") def do_work (monty, veg): "" "Basic Click-voorbeeld volgt je commando's" "" als monty: print ('Wat is dit dan?' Romanes eunt domus "? Mensen genaamd Romanes, they go, the house? ') If veg: print (random.choice ([' Carrot ',' Potato ',' Turnip '])) if __name__ ==' __main__ ': do_work ()

Dit Click-voorbeeld implementeert dezelfde logica in 16 regels code. De argumenten worden voor u geparseerd en het helpscherm wordt gegenereerd:

Deze basisvergelijking laat zien hoeveel tijd en moeite u kunt besparen door programma's zoals Click te gebruiken. Hoewel de opdrachtregelinterface hetzelfde kan lijken voor de eindgebruiker, is de onderliggende code eenvoudiger en bespaart u veel tijdcodering. Alle wijzigingen of updates die u in de toekomst schrijft, zullen ook aanzienlijke ontwikkelingstijdstijgingen meemaken.

Aan de slag met Click for Python

Voordat u Click gebruikt, wilt u misschien een virtuele omgeving configureren. Leer hoe u de virtuele omgeving van Python gebruikt Leer hoe u de virtuele Python-omgeving kunt gebruiken Of u nu een ervaren Python-ontwikkelaar bent, of u bent nog maar net begonnen met het leren instellen van een virtuele omgeving. is essentieel voor elk Python-project. Lees verder . Hiermee stopt u uw Python-pakketten die in conflict zijn met uw systeem Python of andere projecten waar u aan werkt. Je zou ook Python in je browser kunnen proberen Python in je browser proberen Met deze gratis online interactieve shells Probeer Python in je browser met deze gratis online interactieve shells Of je nu deze Python-voorbeelden doorneemt of de basis van arrays en lijsten doorneemt, je kunt test de code rechtstreeks in uw browser. Dit zijn de beste online Python-tolken die we hebben gevonden. Lees Meer als je wilt spelen met Python en Klik.

Zorg er ten slotte voor dat je Python versie 3 gebruikt. Het is mogelijk om Click with Python versie 2 te gebruiken, maar deze voorbeelden zijn in Python 3. Meer informatie over de verschillen tussen Python 2 en Python 3.

Als u klaar bent, installeert u Click vanaf de opdrachtregel met behulp van PIP (hoe u PIP voor Python installeert):

pip install klik

Uw eerste Click-programma schrijven

In een teksteditor begint u met het importeren van Click:

import klik

Na het importeren, maakt u een methode en een hoofd ingangspunt. Onze Python OOP-gids behandelt deze in meer detail, maar ze bieden een plaats om uw code op te slaan, en een manier voor Python om het te starten:

import click import random def veg (): "" "Basismethode zal een willekeurige groente" "" afdrukken (random.choice (['Carrot', 'Potato', 'Turnip', 'Parsnip'])) als __name__ = = '__main__': veg ()

Dit zeer eenvoudige script geeft een willekeurige groente weer. Uw code kan er anders uitzien, maar dit eenvoudige voorbeeld is perfect om te combineren met Click.

Bewaar deze als click_example.py, en voer het vervolgens uit op de opdrachtregel (na het navigeren naar de locatie):

python click_example.py

Je zou een willekeurige plantaardige naam moeten zien. Laten we dingen verbeteren door Click toe te voegen. Wijzig uw code om de Click-decorateurs en a voor lus:

@ click.command () @ click.option ('- total', default = 3, help = "Aantal groenten dat wordt uitgevoerd.") def veg (total): "" "Basismethode retourneert een willekeurige groente" " "voor nummer binnen bereik (totaal): print (random.choice (['Carrot', 'Potato', 'Turnip', 'Parsnip'])) if __name__ == '__main__': veg ()

Tijdens het hardlopen ziet u drie keer een willekeurige groente.

Laten we deze veranderingen afbreken. De @ Click.command () decoratorconfiguraties Klik om met de functie te werken die onmiddellijk volgt op de decorateur. In dit geval is dit de veg () functie. Je hebt dit nodig voor elke methode die je zou willen gebruiken met Click.

De @ click.option decorator configureert klik om parameters te accepteren van de commandoregel, die het zal doorgeven aan uw methode. Er zijn drie argumenten die hier worden gebruikt:

  1. -totaal: Dit is de opdrachtregel voor de totaal argument.
  2. standaard: Als u het totale argument niet opgeeft bij het gebruik van uw script, gebruikt Click de standaardwaarde.
  3. helpen: Een korte zin die uitlegt hoe je je programma moet gebruiken.

Laten we klikken in actie zien. Voer vanuit de opdrachtregel uw script uit, maar geef het door totaal argument als dit:

python click_example.py --totaal 10

Door in te stellen -totaal 10 vanaf de opdrachtregel drukt uw script tien willekeurige groenten af.

Als u in de -helpen vlag, ziet u een leuke helppagina, samen met de opties die u kunt gebruiken:

python click_example.py --help

Meer opdrachten toevoegen

Het is mogelijk om veel Click decorators op dezelfde functie te gebruiken. Voeg een nieuwe klikoptie toe aan de veg functie:

@ click.option ('- jus', standaard = False, help = "Append" met jus "naar de groenten.")

Vergeet niet om dit in de methode door te geven:

def veg (totaal, jus):

Wanneer u nu uw bestand uitvoert, kunt u het doorgeven jus vlag:

python click_example.py --gravy y

Het helpscherm is ook gewijzigd:

Hier is de hele code (met wat kleine refactoring voor netheid):

importeren klik importeren willekeurig @ click.command () @ click.option ('- jus', standaard = False, help = "Toevoegen" met jus "aan de groenten.") @ click.option ('- totaal', default = 3, help = "Aantal te exporteren groenten.") def veg (total, jus): "" "Basismethode zal een willekeurige groente" "" retourneren voor aantal binnen het bereik (totaal): choice = random.choice ( ['Carrot', 'Potato', 'Turnip', 'Parsnip']) if jus: print (f 'choice with jus') else: print (choice) if __name__ == '__main__': veg ()

Nog meer klikopties

Zodra u de basis kent, kunt u beginnen met het kijken naar complexere klikopties. In dit voorbeeld leert u hoe u verschillende waarden kunt doorgeven aan één enkel argument, dat Klik zal omzetten in een tupel. Je kunt meer over tuples leren in onze gids voor het woordenboek van Python.

Maak een nieuw bestand met de naam click_example_2.py. Dit is de startercode die je nodig hebt:

import klik willekeurig importeren @ click.command () def add (): "" "Basismethode voegt twee getallen bij elkaar." "" pass if __name__ == '__main__': add ()

Er is niets nieuws hier. In het vorige gedeelte wordt deze code in detail uitgelegd. Voeg een ... toe @ click.option riep getallen:

@ click.option ('- numbers', nargs = 2, type = int, help = "Voeg twee nummers bij elkaar.")

De enige nieuwe code hier is de nargs = 2, en de Type = int opties. Dit vertelt Klik om twee waarden voor de te accepteren getallen optie en dat ze beide van het type gehele getallen moeten zijn. U kunt dit wijzigen in elk nummer of (geldig) gegevenstype dat u bevalt.

Wijzig tot slot de toevoegen methode om het te accepteren getallen argument, en doe wat verwerking met hen:

def add (numbers): "" "Basismethode voegt twee getallen bij elkaar." "" result = numbers [0] + numbers [1] print (f 'numbers [0] + numbers [1] =  resultaat')

Elke waarde die u doorgeeft is toegankelijk via de getallen voorwerp. Hier is hoe het te gebruiken in de opdrachtregel:

python click_example_2.py - nummers 1 2

Klik op Is de oplossing voor Python-hulpprogramma's

Zoals je hebt gezien, is Click eenvoudig in gebruik, maar erg krachtig. Hoewel deze voorbeelden alleen de basisprincipes van Click betreffen, zijn er veel meer functies die u kunt leren nu u een goed begrip van de basis hebt.

Als je op zoek bent naar een aantal Python-projecten om je nieuwe vaardigheden te oefenen, waarom dan niet leren om een ​​Arduino met Python te besturen. Hoe een Arduino met Python programmeren en besturen. Hoe een Arduino met Python te programmeren en te besturen Helaas is het onmogelijk om een ​​Arduino rechtstreeks in Python te programmeren, maar je kunt het via USB besturen met behulp van een Python-programma. Hier is hoe. Lees meer, of wat dacht u van lezen en schrijven naar Google Spreadsheets met Python Hoe lezen en schrijven naar Google Spreadsheets met Python Hoe lezen en schrijven naar Google Spreadsheets Met Python lijkt Python misschien vreemd en ongebruikelijk, maar het is gemakkelijk te leren en te gebruiken. In dit artikel laat ik je zien hoe je met Python naar Google Spreadsheets kunt lezen en schrijven. Lees verder ? Een van deze projecten zou perfect zijn om naar Click te converteren!

Ontdek meer over: Codeerhandleiding, Python.