Python Academy · Lektion

Opsamling af output

Læs stdout og stderr

Lektion 2 af 413 trin

Opsamling af output er en gratis Python Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Python Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Python Academy-kurset indeholder 4 lektioner i alt.

Opsamling af stdout

Hvis du vil læse det, en kommando udskriver, skal du angive capture_output=True. Teksten findes i resultatets attribut stdout.

import subprocess

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

Bytes kontra tekst

Som standard er uddata bytes. Angiv text=True for i stedet at få afkodede strenge, hvilket normalt er det, du ønsker.

import subprocess

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

Fjernelse af afsluttende linjeskift

Kommandoers uddata slutter ofte med et linjeskift. Brug .strip() til at fjerne det, før du bruger værdien.

import subprocess

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

Opsamling af stderr

Fejl sendes normalt til stderr, som opsamles separat. Det holder normale uddata og fejlmeddelelser 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())

Brug af uddata i kode

Opsamlede uddata er blot en streng, så du kan analysere dem: opdele dem i linjer, konvertere tal eller sende dem videre til resten af dit program.

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)

Omdirigering af stderr til stdout

Hvis du vil flette fejluddata ind i den normale strøm, skal du angive stderr=subprocess.STDOUT. Begge dele vises derefter i stdout.

import subprocess

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

Angivelse af inddata

Send data til en kommandos standardinddata med argumentet input. Her sender vi tekst gennem en pipe til cat.

import subprocess

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

Genvejen check_output

subprocess.check_output() kører en kommando og returnerer dens stdout direkte, mens den hæver en undtagelse ved fejl. Det er en praktisk enkeltlinje til opsamling.

import subprocess

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

Kassering af uddata

Hvis du vil gøre en kommando lydløs, skal du omdirigere dens strømme til subprocess.DEVNULL.

import subprocess

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

Håndtering af fejl med uddata

Når du bruger check=True, indeholder den hævede CalledProcessError stadig de opsamlede output og stderr til fejlfinding.

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())

Samling af det hele

En typisk hjælpefunktion kører en kommando, kontrollerer, om den lykkedes, og returnerer ren tekst. Dette samler det almindelige mønster.

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']))

Hurtigtjek

Afprøv din forståelse af opsamling af uddata.

Opsummering

Du har lært at opsamle uddata:

  • capture_output=True sammen med text=True giver strengene stdout og stderr.
  • Flet strømme sammen med stderr=subprocess.STDOUT, og gør dem lydløse med DEVNULL.
  • Send inddata via input=; check_output er en genvej.
  • Fejl indeholder opsamlede uddata til fejlfinding.

Næste emne: læsning af miljøvariabler og modulet os.

Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
76
Lektioner
320

Ofte stillede spørgsmål

Er lektionen “Opsamling af output” gratis?

Ja — hele teksten til “Opsamling af output” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Python Academy-kurset, skal du opgradere til CoddyKit PRO. Python Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Opsamling af output”?

Læs stdout og stderr Du øver dig i Python Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Python Academy?

Der kræves ingen tidligere erfaring. Python Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Opsamling af output”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Python Academy-lektion?

Ja. Alle Python Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Kør kommandoer med subprocess
  2. Opsamling af output
  3. Miljø og os-modulet
  4. shutil til filoperationer
← Tilbage til Python Academy