0Pricing
Python Academy · Lekcja

Przechwytywanie danych wyjściowych

Odczytuj stdout i stderr

Przechwytywanie danych wyjściowych to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Przechwytywanie stdout

Aby odczytać dane wypisywane przez polecenie, przekaż capture_output=True. Tekst pojawi się w atrybucie stdout wyniku.

import subprocess

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

Bajty a tekst

Domyślnie dane wyjściowe mają postać bajtów. Przekaż text=True, aby zamiast tego otrzymać zdekodowane ciągi znaków — zazwyczaj właśnie tego potrzebujesz.

import subprocess

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

Usuwanie końcowego znaku nowej linii

Dane wyjściowe polecenia często kończą się znakiem nowej linii. Użyj .strip(), aby usunąć go przed użyciem wartości.

import subprocess

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

Przechwytywanie stderr

Błędy zwykle trafiają do stderr, który jest przechwytywany osobno. Dzięki temu zwykłe dane wyjściowe i komunikaty o błędach pozostają rozdzielone.

import subprocess

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

Używanie danych wyjściowych w kodzie

Przechwycone dane wyjściowe są zwykłym ciągiem znaków, więc można je parsować: podzielić na wiersze, przekonwertować liczby lub przekazać do dalszej części programu.

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)

Przekierowywanie stderr do stdout

Aby połączyć dane wyjściowe błędów ze zwykłym strumieniem, ustaw stderr=subprocess.STDOUT. Oba rodzaje danych pojawią się wtedy w stdout.

import subprocess

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

Przekazywanie danych wejściowych

Przekaż dane do standardowego wejścia polecenia za pomocą argumentu input. W tym przykładzie przekazujemy tekst potokiem do cat.

import subprocess

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

Skrót check_output

subprocess.check_output() uruchamia polecenie i bezpośrednio zwraca jego dane stdout, zgłaszając wyjątek w razie niepowodzenia. Jest to wygodny jednolinijkowy sposób przechwytywania danych.

import subprocess

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

Odrzucanie danych wyjściowych

Aby wyciszyć polecenie, przekieruj jego strumienie do subprocess.DEVNULL.

import subprocess

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

Obsługa błędów wraz z danymi wyjściowymi

Podczas używania check=True zgłoszony wyjątek CalledProcessError nadal zawiera przechwycone atrybuty output i stderr, które pomagają zdiagnozować problem.

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

Łączenie elementów

Typowy pomocniczy fragment kodu uruchamia polecenie, sprawdza powodzenie i zwraca oczyszczony tekst. Jest to opakowanie często stosowanego wzorca.

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

Szybki test

Sprawdź, czy rozumie Pan / rozumie Pani zasady przechwytywania danych wyjściowych.

Podsumowanie

Nauczył się Pan / Nauczyła się Pani przechwytywać dane wyjściowe:

  • capture_output=True wraz z text=True zapewnia tekstowe wartości stdout i stderr.
  • Strumienie można połączyć za pomocą stderr=subprocess.STDOUT, a wyciszyć za pomocą DEVNULL.
  • Dane wejściowe można przekazać przez input=; check_output jest skróconym rozwiązaniem.
  • Błędy zawierają przechwycone dane wyjściowe, które pomagają w debugowaniu.

Następnie: odczytywanie zmiennych środowiskowych i korzystanie z modułu os.

Często zadawane pytania

Czy lekcja „Przechwytywanie danych wyjściowych” jest bezpłatna?

Tak — pełny tekst „Przechwytywanie danych wyjściowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Przechwytywanie danych wyjściowych”?

Odczytuj stdout i stderr Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Przechwytywanie danych wyjściowych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Uruchamianie poleceń za pomocą subprocess
  2. Przechwytywanie danych wyjściowych
  3. Środowisko i moduł os
  4. shutil do operacji na plikach
← Powrót do Python Academy