Fånga utdata
Läs stdout och stderr
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=Truetillsammans medtext=Trueger strängar istdoutochstderr.- Slå ihop strömmar med
stderr=subprocess.STDOUT; tysta dem medDEVNULL. - 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.
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.