Underkommandon och alternativ
Bygg komplexa CLI-program
Underkommandon och alternativ är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.
Varför underkommandon?
Verktyg som git har underkommandon: git add och git commit. argparse stöder detta via subparsers, där varje underkommando har sina egna argument.
import argparse
parser = argparse.ArgumentParser(prog='tool')
sub = parser.add_subparsers(dest='command')
print('subparsers ready')Lägga till subparsers
add_subparsers returnerar ett objekt vars metod add_parser skapar varje underkommando. dest lagrar vilket underkommando som valdes.
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)Argument för varje underkommando
Varje subparser kan definiera sina egna argument. Underkommandot add här tar ett namn, medan list inte tar några argument.
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)Skicka vidare utifrån kommandot
Efter parsningen väljer ni gren utifrån args.command för att köra rätt logik.
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 för hanterare
Ett tydligt mönster är att koppla en funktion till varje subparser med set_defaults(func=...) och sedan anropa 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)Gemensamma alternativ via överordnade parsers
En överordnad parser innehåller alternativ som är gemensamma för flera underkommandon, vilket undviker upprepning. Skicka med parents=[base] och 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)Standardvärden för varje alternativ
Alternativ för underkommandon kan ha egna standardvärden och typer, precis som argument på toppnivå.
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)Lägga till upprepade alternativ
action='append' gör att en flagga kan anges flera gånger och samlar varje värde i en lista.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--tag', action='append', default=[])
args = parser.parse_args(['--tag', 'a', '--tag', 'b'])
print(args.tag)Räkna flaggor
action='count' räknar hur många gånger en flagga förekommer – det klassiska -vvv-mönstret för mer utförlig utdata.
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)Ett verktyg med två kommandon
När ni kombinerar underkommandon, hanterare och gemensamma alternativ får ni ett strukturerat CLI med flera kommandon.
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)Obligatoriskt underkommando
Ange required=True för subparsers så att användaren måste välja ett kommando. Annars genererar argparse ett fel.
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)Snabbtest
Testa er förståelse av underkommandon och alternativ.
Sammanfattning
Ni har lärt er underkommandon och alternativ:
add_subparsersochadd_parserbygger verktyg med flera kommandon.set_defaults(func=...)skickar vidare till hanterare.- Överordnade parsers delar gemensamma alternativ.
- Åtgärderna
appendochcounthanterar upprepade flaggor.
Nästa steg: Click-biblioteket för dekoratorbaserade CLI:er.
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 76
- Lektioner
- 320
Vanliga frågor
Är lektionen ”Underkommandon och alternativ” gratis?
Ja – hela texten till ”Underkommandon och alternativ” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Underkommandon och alternativ”?
Bygg komplexa CLI-program Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Python Academy?
Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Underkommandon och alternativ”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Python Academy-lektionen?
Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Grunderna i argparse
- Underkommandon och alternativ
- Click-biblioteket
- Omfattande terminalutdata