Come creare i propri programmi da riga di comando in Python con un clic
Annuncio pubblicitario
Click è un pacchetto Python per la scrittura di interfacce da riga di comando. Produce una splendida documentazione per te e ti consente di creare interfacce da riga di comando in appena una riga di codice. In breve: è fantastico e può aiutarti a portare i tuoi programmi al livello successivo.
Ecco come puoi usarlo per ravvivare i tuoi progetti Python.
Scrittura di programmi da riga di comando senza clic
È possibile scrivere programmi da riga di comando senza usare Click, ma farlo richiede più impegno e molto più codice. È necessario analizzare gli argomenti della riga di comando, eseguire la convalida, sviluppare la logica per gestire argomenti diversi e creare un menu di aiuto personalizzato. Vuoi aggiungere una nuova opzione? Quindi modificherai la tua funzione di aiuto.
Non c'è niente di sbagliato nello scrivere il tuo codice, e farlo è un ottimo modo per imparare Python, ma Click ti permette di seguire i principi di "Non ripetere te stesso" (DRY). Senza Click, scriverai il codice che è fragile e richiede molta manutenzione ogni volta che si verificano cambiamenti.
Ecco una semplice interfaccia a riga di comando codificata senza fare clic:
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()
Queste 27 linee di Python funzionano bene ma sono molto fragili. Qualsiasi modifica apportata al tuo programma avrà bisogno di molti altri codici di supporto per cambiare. Se si modifica il nome di un argomento, è necessario aggiornare le informazioni della guida. Questo codice può facilmente crescere senza controllo.
Ecco la stessa logica con 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()
Questo esempio Click implementa la stessa logica in 16 righe di codice. Gli argomenti vengono analizzati per te e viene generata la schermata di aiuto:
Questo confronto di base mostra quanto tempo e fatica puoi risparmiare usando programmi come Click. Mentre l'interfaccia della riga di comando può apparire uguale per l'utente finale, il codice sottostante è più semplice e risparmierai molto tempo nella codifica. Eventuali modifiche o aggiornamenti che scriverai in futuro vedranno anche un aumento significativo dei tempi di sviluppo.
Introduzione a Click for Python
Prima di utilizzare Click, potresti voler configurare un ambiente virtuale Scopri come utilizzare l'ambiente virtuale Python Scopri come utilizzare l'ambiente virtuale Python Sia che tu sia uno sviluppatore Python esperto o che tu abbia appena iniziato, impari come configurare un ambiente virtuale è essenziale per qualsiasi progetto Python. Leggi di più . Ciò impedirà ai pacchetti Python di entrare in conflitto con il tuo sistema Python o altri progetti su cui potresti lavorare. Puoi anche provare Python nel tuo browser Prova Python nel tuo browser con queste shell interattive online gratuite Prova Python nel tuo browser con queste shell interattive online gratuite Sia che tu stia seguendo questi esempi Python o rivedendo le basi di array ed elenchi, puoi prova il codice direttamente nel tuo browser. Ecco i migliori interpreti Python online che abbiamo trovato. Leggi di più se vuoi giocare con Python e Click.
Infine, assicurati di eseguire Python versione 3. È possibile utilizzare Click con Python versione 2, ma questi esempi sono in Python 3. Ulteriori informazioni sulle differenze tra Python 2 e Python 3.
Una volta pronto, installa Click dalla riga di comando usando PIP (come installare PIP per Python):
pip install click
Scrivi il tuo programma First Click
In un editor di testo, iniziare importando Fare clic:
import click
Una volta importato, crea un metodo e un punto di ingresso principale . La nostra guida OOP Python tratta questi in modo più dettagliato, ma forniscono un posto dove archiviare il codice e un modo per iniziare l'esecuzione di Python:
import click import random def veg(): """ Basic method will return a random vegetable""" print(random.choice(['Carrot', 'Potato', 'Turnip', 'Parsnip'])) if __name__ == '__main__': veg()
Questo script molto semplice produrrà un vegetale casuale. Il tuo codice potrebbe apparire diverso, ma questo semplice esempio è perfetto da combinare con Click.
Salvalo come click_example.py, quindi eseguilo nella riga di comando (dopo aver navigato nella sua posizione):
python click_example.py
Dovresti vedere un nome vegetale casuale. Miglioriamo le cose aggiungendo Click. Modifica il codice per includere i decoratori di clic e un ciclo for :
@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()
Durante la corsa, vedrai una verdura casuale visualizzata tre volte.
Analizziamo questi cambiamenti. Il decoratore @ click.command () configura Click per lavorare con la funzione immediatamente successiva al decoratore. In questo caso, questa è la funzione veg () . Ne avrai bisogno per ogni metodo che desideri utilizzare con Click.
Il decoratore @ click.option configura click per accettare i parametri dalla riga di comando, che passerà al tuo metodo. Ci sono tre argomenti usati qui:
- –Totale: questo è il nome della riga di comando per l'argomento totale .
- predefinito: se non si specifica l'argomento totale quando si utilizza lo script, fare clic su utilizzerà il valore predefinito.
- aiuto: una breve frase che spiega come utilizzare il programma.
Vediamo Click in azione. Dalla riga di comando, esegui il tuo script, ma passa l'argomento totale in questo modo:
python click_example.py --total 10
Impostando –totale 10 dalla riga di comando, lo script stamperà dieci verdure casuali.
Se passi il flag –help, vedrai una bella pagina di aiuto, insieme alle opzioni che puoi usare:
python click_example.py --help
Aggiunta di più comandi
È possibile utilizzare molti decoratori di clic sulla stessa funzione. Aggiungi un'altra opzione clic alla funzione veg :
@click.option('--gravy', default=False, help='Append "with gravy" to the vegetables.')
Non dimenticare di passare questo nel metodo:
def veg(total, gravy):
Ora quando esegui il tuo file, puoi passare la bandiera del sugo :
python click_example.py --gravy y
Anche la schermata di aiuto è cambiata:
Ecco l'intero codice (con alcuni refactoring minori per la pulizia):
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()
Ancora più opzioni di clic
Una volta che conosci le basi, puoi iniziare a esaminare le opzioni Click più complesse. In questo esempio, imparerai come passare diversi valori a un singolo argomento, che Click convertirà in una tupla. Puoi saperne di più sulle tuple nella nostra guida al dizionario Python.
Crea un nuovo file chiamato click_example_2.py . Ecco il codice iniziale necessario:
import click import random @click.command() def add(): """ Basic method will add two numbers together.""" pass if __name__ == '__main__': add()
Non c'è niente di nuovo qui. La sezione precedente spiega questo codice in dettaglio. Aggiungi un @ click.option chiamato numeri :
@click.option('--numbers', nargs=2, type=int, help='Add two numbers together.')
L'unico nuovo codice qui sono le opzioni nargs = 2 e type = int . Questo dice a Click di accettare due valori per l'opzione numeri e che devono essere entrambi di tipo numeri interi. Puoi cambiarlo in qualsiasi numero o tipo di dati (valido) che ti piace.
Infine, modifica il metodo add per accettare l'argomento numeri e esegui alcune elaborazioni con essi:
def add(numbers): """ Basic method will add two numbers together.""" result = numbers[0] + numbers[1] print(f'{numbers[0]} + {numbers[1]} = {result}')
Ogni valore che passi è accessibile attraverso l'oggetto numeri . Ecco come usarlo nella riga di comando:
python click_example_2.py --numbers 1 2
Fare clic su È la soluzione per le utility Python
Come hai visto, Click è facile da usare ma molto potente. Mentre questi esempi trattano solo le basi di Click, ci sono molte più funzioni che puoi imparare ora che hai una solida conoscenza delle basi.
Se stai cercando alcuni progetti Python con cui mettere alla prova le tue nuove abilità trovate, perché non imparare a controllare un Arduino con Python Come programmare e controllare un Arduino con Python Come programmare e controllare un Arduino con Python Purtroppo, è impossibile per programmare direttamente un Arduino in Python, ma puoi controllarlo tramite USB usando un programma Python. Ecco come. Leggi di più o come leggere e scrivere su Fogli Google con Python Come leggere e scrivere su Fogli Google con Python Come leggere e scrivere su Fogli Google con Python Python può sembrare strano e insolito, tuttavia è facile da imparare e da usare. In questo articolo, ti mostrerò come leggere e scrivere su Fogli Google usando Python. Leggi di più ? Uno di questi progetti sarebbe perfetto per la conversione in Click!
Ulteriori informazioni su: Tutorial sulla codifica, Python.