Sottocomandi e opzioni
Creare CLI complesse
Sottocomandi e opzioni è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.
Perché usare i sottocomandi?
Strumenti come git hanno sottocomandi: git add, git commit. argparse li supporta tramite i subparser, in cui ogni sottocomando dispone dei propri argomenti.
import argparse
parser = argparse.ArgumentParser(prog='tool')
sub = parser.add_subparsers(dest='command')
print('subparsers ready')Aggiungere i subparser
add_subparsers restituisce un oggetto il cui metodo add_parser crea ogni sottocomando. dest memorizza quale sottocomando è stato scelto.
import argparse
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='command')
sub.add_parser('start')
sub.add_parser('stop')
args = parser.parse_args(['start'])
print('command:', args.command)Argomenti per sottocomando
Ogni subparser può definire i propri argomenti. In questo esempio il sottocomando add accetta un nome, mentre list non ne accetta alcuno.
import argparse
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='command')
p_add = sub.add_parser('add')
p_add.add_argument('name')
sub.add_parser('list')
args = parser.parse_args(['add', 'milk'])
print(args.command, args.name)Instradare in base al comando
Dopo l'analisi, utilizzi args.command per eseguire la logica corretta.
import argparse
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='command')
p_add = sub.add_parser('add')
p_add.add_argument('item')
sub.add_parser('clear')
args = parser.parse_args(['add', 'eggs'])
if args.command == 'add':
print('adding', args.item)
elif args.command == 'clear':
print('clearing all')set_defaults per i gestori
Un modello chiaro consiste nell'associare una funzione a ogni subparser con set_defaults(func=...), quindi chiamare args.func(args).
import argparse
def do_hi(args):
print('hi', args.who)
parser = argparse.ArgumentParser()
sub = parser.add_subparsers()
p = sub.add_parser('hi')
p.add_argument('who')
p.set_defaults(func=do_hi)
args = parser.parse_args(['hi', 'Ana'])
args.func(args)Opzioni condivise tramite parser genitori
Un parser genitore contiene le opzioni comuni a più sottocomandi, evitando ripetizioni. Passi parents=[base] e add_help=False.
import argparse
base = argparse.ArgumentParser(add_help=False)
base.add_argument('--verbose', action='store_true')
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='cmd')
sub.add_parser('run', parents=[base])
args = parser.parse_args(['run', '--verbose'])
print(args.cmd, args.verbose)Valori predefiniti per ogni opzione
Le opzioni dei sottocomandi possono avere valori predefiniti e tipi propri, proprio come gli argomenti di livello superiore.
import argparse
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='cmd')
p = sub.add_parser('scale')
p.add_argument('--factor', type=float, default=1.0)
args = parser.parse_args(['scale'])
print('factor:', args.factor)Aggiungere opzioni ripetute
action='append' consente di specificare più volte un flag, raccogliendo ogni valore in un elenco.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--tag', action='append', default=[])
args = parser.parse_args(['--tag', 'a', '--tag', 'b'])
print(args.tag)Contare i flag
action='count' conta quante volte compare un flag: è il classico schema di verbosità -vvv.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-v', action='count', default=0)
args = parser.parse_args(['-v', '-v', '-v'])
print('verbosity level:', args.v)Uno strumento con due comandi
Combinare sottocomandi, gestori e opzioni condivise permette di creare una CLI strutturata con più comandi.
import argparse
def add(args):
print('add', args.item, 'qty', args.qty)
def remove(args):
print('remove', args.item)
parser = argparse.ArgumentParser()
sub = parser.add_subparsers()
pa = sub.add_parser('add')
pa.add_argument('item')
pa.add_argument('--qty', type=int, default=1)
pa.set_defaults(func=add)
pr = sub.add_parser('remove')
pr.add_argument('item')
pr.set_defaults(func=remove)
args = parser.parse_args(['add', 'pen', '--qty', '3'])
args.func(args)Sottocomando obbligatorio
Imposti required=True sui subparser affinché l'utente debba scegliere un comando; in caso contrario argparse genera un errore.
import argparse
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='cmd', required=True)
sub.add_parser('go')
args = parser.parse_args(['go'])
print('chosen:', args.cmd)Verifica rapida
Verifichi la Sua comprensione dei sottocomandi e delle opzioni.
Riepilogo
Ha imparato a usare sottocomandi e opzioni:
add_subparserseadd_parsercostruiscono strumenti con più comandi.set_defaults(func=...)instrada l'esecuzione ai gestori.- I parser genitori condividono le opzioni comuni.
- Le azioni
appendecountgestiscono i flag ripetuti.
Prossimo argomento: la libreria Click per creare CLI basate sui decoratori.
Domande Frequenti
La lezione «Sottocomandi e opzioni» è gratuita?
Sì — il testo completo di «Sottocomandi e opzioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.
Cosa imparerò in «Sottocomandi e opzioni»?
Creare CLI complesse Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Python Academy?
Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Sottocomandi e opzioni»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Python Academy?
Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Nozioni di base su argparse
- Sottocomandi e opzioni
- La libreria Click
- Output ricco del terminale