Fange oppdata
Les stdout og stderr
Fange oppdata er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.
Samle inn stdout
Hvis du vil lese det en kommando skriver ut, sender du capture_output=True. Teksten vises i resultatets stdout-attributt.
import subprocess
cp = subprocess.run(['echo', 'hello'], capture_output=True)
print(cp.stdout)Byteverdier kontra tekst
Som standard er utdata bytes. Send text=True for å få dekodede strenger i stedet, noe som vanligvis er det du ønsker.
import subprocess
cp = subprocess.run(['echo', 'hello'], capture_output=True, text=True)
print(repr(cp.stdout))Fjerne avsluttende linjeskift
Kommandoutdata avsluttes ofte med et linjeskift. Bruk .strip() for å fjerne det før du bruker verdien.
import subprocess
cp = subprocess.run(['echo', 'value'], capture_output=True, text=True)
clean = cp.stdout.strip()
print('[' + clean + ']')Samle inn stderr
Feil sendes vanligvis til stderr, som samles inn separat. Dermed holdes vanlige utdata og feilmeldinger adskilt.
import subprocess
cp = subprocess.run(['ls', '/no/such/dir'], capture_output=True, text=True)
print('stdout:', repr(cp.stdout))
print('stderr:', cp.stderr.strip())Bruke utdata i kode
Innsamlede utdata er bare en streng, så du kan analysere den: dele den opp i linjer, konvertere tall eller sende den videre til 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)Omdirigere stderr til stdout
Hvis du vil slå sammen feilutdata med den vanlige strømmen, angir du stderr=subprocess.STDOUT. Begge vises da i stdout.
import subprocess
cp = subprocess.run(['ls', '/no/such/dir'], stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, text=True)
print(cp.stdout.strip())Sende inndata
Send data til en kommandos stdin med argumentet input. Her sender vi tekst gjennom en pipe til cat.
import subprocess
cp = subprocess.run(['cat'], input='piped in\n', capture_output=True, text=True)
print(cp.stdout.strip())Snarveien check_output
subprocess.check_output() kjører en kommando og returnerer stdout direkte, samtidig som det hever et unntak ved feil. Det er en praktisk énlinjer for å samle inn utdata.
import subprocess
out = subprocess.check_output(['echo', 'quick'], text=True)
print(out.strip())Forkaste utdata
Hvis du vil gjøre en kommando stille, omdirigerer du strømmene til subprocess.DEVNULL.
import subprocess
cp = subprocess.run(['echo', 'silent'], stdout=subprocess.DEVNULL)
print('return code only:', cp.returncode)Håndtere feil med utdata
Når du bruker check=True, inneholder det hevede CalledProcessError-unntaket fortsatt de innsamlede output- og stderr-verdiene for feilsøking.
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())Sette alt sammen
En typisk hjelpefunksjon kjører en kommando, kontrollerer om den lykkes og returnerer ren tekst. Dette er den vanlige fremgangsmåten samlet på ett sted.
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']))Kort test
Test forståelsen din av å samle inn utdata.
Oppsummering
Du har lært å samle inn utdata:
capture_output=Truesammen medtext=Truegir tekststrenger istdoutogstderr.- Slå sammen strømmer med
stderr=subprocess.STDOUT, og gjør dem stille medDEVNULL. - Send inndata via
input=;check_outputer en snarvei. - Feil inneholder innsamlede utdata som kan brukes til feilsøking.
Neste: lese miljøvariabler og bruke os-modulen.
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 76
- Leksjoner
- 320
Ofte stilte spørsmål
Er leksjonen «Fange oppdata» gratis?
Ja – hele teksten i «Fange oppdata» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Fange oppdata»?
Les stdout og stderr Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Python Academy?
Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Fange oppdata»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?
Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.