Hoe u uw eigen opdrachtregelprogramma's in Python kunt maken met Click
Advertentie
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 helpen uw programma's naar het volgende niveau te brengen.
Hier is hoe je het kunt gebruiken om je Python-projecten op te vrolijken.
Opdrachtregelprogramma's schrijven zonder te klikken
Het is mogelijk om opdrachtregelprogramma's te schrijven zonder Click te gebruiken, maar dit kost meer moeite en veel meer code. U moet opdrachtregelargumenten parseren, validatie uitvoeren, logica ontwikkelen om verschillende argumenten af te handelen en een aangepast helpmenu maken. Wilt u een nieuwe optie toevoegen? Je zult dan je helpfunctie aanpassen.
Er is niets mis met het schrijven van uw eigen code, en dit is een geweldige manier om Python te leren, maar met Click kunt u de principes van "Don't Repeat Yourself" (DRY) volgen. Zonder Click schrijft u code die kwetsbaar is en veel onderhoud vereist wanneer er zich wijzigingen voordoen.
Hier is een eenvoudige opdrachtregelinterface gecodeerd zonder Click:
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()
Deze 27 lijnen van Python werken goed, maar zijn erg kwetsbaar. Elke wijziging die u in uw programma aanbrengt, heeft veel andere ondersteunende code nodig om te wijzigen. 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:
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()
Dit Click-voorbeeld implementeert dezelfde logica in 16 coderegels. De argumenten worden voor u ontleed 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 er voor de eindgebruiker hetzelfde uitziet, is de onderliggende code eenvoudiger en bespaart u veel tijdcodering. Alle wijzigingen of updates die u in de toekomst schrijft, zullen ook de ontwikkelingstijd aanzienlijk verhogen.
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 omgeving van Python gebruikt Of u nu een ervaren Python-ontwikkelaar bent of net begint, leert hoe u een virtuele omgeving instelt is essentieel voor elk Python-project. Lees verder . Dit voorkomt dat uw Python-pakketten conflicteren met uw systeem Python of andere projecten waaraan u mogelijk werkt. Je kunt Python ook in je browser proberen. Probeer Python in je browser met deze gratis online interactieve shells. Probeer Python in je browser met deze gratis online interactieve shells. Of je deze Python-voorbeelden doorneemt of de basisprincipes van arrays en lijsten bekijkt, je kunt test de code rechtstreeks in uw browser. Hier zijn de beste online Python-tolken die we hebben gevonden. Lees meer als u met Python en Click wilt spelen.
Zorg er ten slotte voor dat u Python versie 3 gebruikt. Het is mogelijk Click met Python versie 2 te gebruiken, maar deze voorbeelden staan in Python 3. Meer informatie over de verschillen tussen Python 2 en Python 3.
Eenmaal gereed, installeer Klik op de opdrachtregel met behulp van PIP (hoe PIP voor Python te installeren):
pip install click
Uw First Click-programma schrijven
Begin in een teksteditor met het importeren van Click:
import click
Maak na het importeren een methode en een hoofdinvoerpunt . 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(): """ Basic method will return a random vegetable""" print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip'])) if __name__ == '__main__': veg()
Dit zeer eenvoudige script levert een willekeurige groente op. Uw code kan er anders uitzien, maar dit eenvoudige voorbeeld is perfect te combineren met Click.
Sla dit op 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 een for- lus op te nemen:
@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()
Als je rent, zie je een willekeurige groente drie keer weergegeven.
Laten we deze veranderingen afbreken. De decorateur @ click.command () configureert Click om te werken met de functie direct na de decorateur. In dit geval is dit de functie veg () . U hebt dit nodig voor elke methode die u met Click wilt gebruiken.
De decorator @ click.option configureert click om parameters van de opdrachtregel te accepteren, die aan uw methode worden doorgegeven. Er worden hier drie argumenten gebruikt:
- –Totaal: dit is de opdrachtregelnaam voor het totale argument.
- standaard: Als u het totale argument niet opgeeft wanneer u uw script gebruikt, gebruikt Click de standaardwaarde.
- help: een korte zin waarin wordt uitgelegd hoe u uw programma kunt gebruiken.
Laten we Click in actie zien. Voer uw script uit vanaf de opdrachtregel, maar geef het totale argument als volgt door:
python click_example.py --total 10
Door –totaal 10 in te stellen vanaf de opdrachtregel, drukt uw script tien willekeurige groenten af.
Als u de vlag –help doorgeeft, ziet u een mooie Help-pagina, samen met de opties die u kunt gebruiken:
python click_example.py --help
Meer opdrachten toevoegen
Het is mogelijk om veel Click-decorateurs op dezelfde functie te gebruiken. Voeg nog een klikoptie toe aan de vegetarische functie:
@click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.')
Vergeet niet dit door te geven aan de methode:
def veg(total, gravy):
Wanneer u nu uw bestand uitvoert, kunt u de jusvlag doorgeven:
python click_example.py --gravy y
Het helpscherm is ook gewijzigd:
Hier is de hele code (met enkele kleine refactoring voor netheid):
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()
Nog meer klikopties
Zodra u de basis kent, kunt u complexere Click-opties gaan bekijken. In dit voorbeeld leert u hoe u verschillende waarden kunt doorgeven aan een enkel argument, dat Click zal converteren naar een tuple. Je kunt meer leren over tupels in onze gids voor het Python-woordenboek.
Maak een nieuw bestand met de naam click_example_2.py . Dit is de startercode die je nodig hebt:
import click import random @click.command() def add(): """ Basic method will add two numbers together.""" pass if __name__ == '__main__': add()
Er is hier niets nieuws. In het vorige gedeelte wordt deze code in detail uitgelegd. Voeg een @ click.option met de naam nummers toe :
@click.option('--numbers', nargs=2, type=int, help='Add two numbers together.')
De enige nieuwe code hier zijn de nargs = 2 en de opties type = int . Dit vertelt Click om twee waarden voor de optie getallen te accepteren en dat ze beide van het type gehele getallen moeten zijn. U kunt dit wijzigen in elk nummer of (geldig) datatype dat u wilt.
Wijzig ten slotte de add- methode om het argument voor getallen te accepteren, en voer wat verwerking met hen uit:
def add(numbers): """ Basic method will add two numbers together.""" result = numbers[0] + numbers[1] print(f'{numbers[0]} + {numbers[1]} = {result}')
Elke waarde die u doorgeeft, is toegankelijk via het getallenobject . Hier is hoe het te gebruiken op de opdrachtregel:
python click_example_2.py --numbers 1 2
Klik is de oplossing voor Python-hulpprogramma's
Zoals je hebt gezien, is Click eenvoudig te gebruiken maar zeer krachtig. Hoewel deze voorbeelden alleen de basisbeginselen van Click behandelen, zijn er nog veel meer functies waarover je nu kunt leren nu je de basis begrijpt.
Als je op zoek bent naar een aantal Python-projecten om je nieuwe vaardigheden mee te oefenen, waarom dan niet leren hoe je een Arduino bestuurt met Python Een Arduino programmeren en besturen met Python Een Arduino programmeren en besturen met Python Helaas is het onmogelijk om een Arduino rechtstreeks in Python te programmeren, maar je kunt hem via USB besturen met een Python-programma. Hier is hoe. Meer lezen, of hoe zit het lezen en schrijven naar Google Spreadsheets met Python Hoe te lezen en schrijven naar Google Spreadsheets met Python Hoe te lezen en schrijven naar Google Spreadsheets met Python Python lijkt misschien vreemd en ongewoon, maar het is gemakkelijk te leren en te gebruiken. In dit artikel laat ik je zien hoe je kunt lezen en schrijven naar Google Spreadsheets met Python. Lees verder ? Elk van deze projecten zou perfect zijn om te converteren naar Click!
Ontdek meer over: Coding Tutorials, Python.