Python Academy · leksjon

Fange oppdata

Les stdout og stderr

Leksjon 2 av 413 trinn

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=True sammen med text=True gir tekststrenger i stdout og stderr.
  • Slå sammen strømmer med stderr=subprocess.STDOUT, og gjør dem stille med DEVNULL.
  • Send inndata via input=; check_output er en snarvei.
  • Feil inneholder innsamlede utdata som kan brukes til feilsøking.

Neste: lese miljøvariabler og bruke os-modulen.

Gratis å komme i gang

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.

Alle leksjonene i dette kurset

  1. Kjør kommandoer med subprocess
  2. Fange oppdata
  3. Miljø og os-modulen
  4. shutil for filoperasjoner
← Tilbake til Python Academy