Python Academy · Lektion

Fånga utdata

Läs stdout och stderr

Lektion 2 av 413 steg

Fånga utdata ä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.

Fånga stdout

För att läsa det som ett kommando skriver ut skickar Ni med capture_output=True. Texten finns i resultatets attribut stdout.

import subprocess

cp = subprocess.run(['echo', 'hello'], capture_output=True)
print(cp.stdout)

Bytes kontra text

Som standard är utdata bytes. Skicka med text=True för att i stället få avkodade strängar, vilket vanligtvis är det som behövs.

import subprocess

cp = subprocess.run(['echo', 'hello'], capture_output=True, text=True)
print(repr(cp.stdout))

Ta bort avslutande radbrytning

Kommandoutdata avslutas ofta med en radbrytning. Använd .strip() för att ta bort den innan värdet används.

import subprocess

cp = subprocess.run(['echo', 'value'], capture_output=True, text=True)
clean = cp.stdout.strip()
print('[' + clean + ']')

Fånga stderr

Fel skickas vanligtvis till stderr, som fångas separat. På så sätt hålls normal utdata och felmeddelanden åtskilda.

import subprocess

cp = subprocess.run(['ls', '/no/such/dir'], capture_output=True, text=True)
print('stdout:', repr(cp.stdout))
print('stderr:', cp.stderr.strip())

Använd utdata i kod

Fångad utdata är bara en sträng, så den kan tolkas: dela upp den i rader, konvertera tal eller skicka den vidare till resten av programmet.

import subprocess

cp = subprocess.run(['printf', 'a\nb\nc\n'], capture_output=True, text=True)
lines = cp.stdout.splitlines()
print('line count:', len(lines))
print(lines)

Omdirigera stderr till stdout

För att slå ihop felutdata med den normala strömmen anger Ni stderr=subprocess.STDOUT. Båda visas då i stdout.

import subprocess

cp = subprocess.run(['ls', '/no/such/dir'], stdout=subprocess.PIPE,
                    stderr=subprocess.STDOUT, text=True)
print(cp.stdout.strip())

Skicka indata

Skicka data till ett kommandos stdin med argumentet input. Här skickas text vidare till cat.

import subprocess

cp = subprocess.run(['cat'], input='piped in\n', capture_output=True, text=True)
print(cp.stdout.strip())

Genvägen check_output

subprocess.check_output() kör ett kommando och returnerar dess stdout direkt, samtidigt som ett fel kastas vid misslyckande. Det är ett praktiskt enradskommando för att fånga utdata.

import subprocess

out = subprocess.check_output(['echo', 'quick'], text=True)
print(out.strip())

Kassera utdata

För att tysta ett kommando omdirigerar Ni dess strömmar till subprocess.DEVNULL.

import subprocess

cp = subprocess.run(['echo', 'silent'], stdout=subprocess.DEVNULL)
print('return code only:', cp.returncode)

Hantera fel med utdata

När check=True används innehåller det kastade CalledProcessError fortfarande den fångade output och stderr, vilket underlättar felsökning.

import subprocess

try:
    subprocess.run(['ls', '/missing'], capture_output=True, text=True, check=True)
except subprocess.CalledProcessError as e:
    print('failed:', e.returncode)
    print('stderr:', e.stderr.strip())

Sätt ihop delarna

En typisk hjälpfunktion kör ett kommando, kontrollerar att det lyckades och returnerar ren text. Detta kapslar in det vanliga mönstret.

import subprocess

def capture(cmd):
    cp = subprocess.run(cmd, capture_output=True, text=True, check=True)
    return cp.stdout.strip()

print(capture(['echo', 'final result']))

Snabbkontroll

Testa förståelsen av att fånga utdata.

Sammanfattning

Ni har lärt Er att fånga utdata:

  • capture_output=True tillsammans med text=True ger strängar i stdout och stderr.
  • Slå ihop strömmar med stderr=subprocess.STDOUT; tysta dem med DEVNULL.
  • Skicka indata via input=; check_output är en genväg.
  • Fel innehåller fångad utdata för felsökning.

Nästa steg: läsa miljövariabler och modulen os.

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 ”Fånga utdata” gratis?

Ja – hela texten till ”Fånga utdata” 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 ”Fånga utdata”?

Läs stdout och stderr 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 ”Fånga utdata”?

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. Köra kommandon med subprocess
  2. Fånga utdata
  3. Miljö och os-modulen
  4. shutil för filåtgärder
← Tillbaka till Python Academy