0Pricing
Python Academy · Lezione

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_subparsers e add_parser costruiscono strumenti con più comandi.
  • set_defaults(func=...) instrada l'esecuzione ai gestori.
  • I parser genitori condividono le opzioni comuni.
  • Le azioni append e count gestiscono 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

  1. Nozioni di base su argparse
  2. Sottocomandi e opzioni
  3. La libreria Click
  4. Output ricco del terminale
← Torna a Python Academy