Python Academy · Lektion

Underkommandon och alternativ

Bygg komplexa CLI-program

Lektion 2 av 413 steg

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_subparsers och add_parser bygger verktyg med flera kommandon.
  • set_defaults(func=...) skickar vidare till hanterare.
  • Överordnade parsers delar gemensamma alternativ.
  • Åtgärderna append och count hanterar upprepade flaggor.

Nästa steg: Click-biblioteket för dekoratorbaserade CLI:er.

Gratis att börja

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

  1. Grunderna i argparse
  2. Underkommandon och alternativ
  3. Click-biblioteket
  4. Omfattande terminalutdata
← Tillbaka till Python Academy