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=Truewraz ztext=Truezapewnia tekstowe wartościstdoutistderr.- Strumienie można połączyć za pomocą
stderr=subprocess.STDOUT, a wyciszyć za pomocąDEVNULL. - Dane wejściowe można przekazać przez
input=;check_outputjest 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
- Uruchamianie poleceń za pomocą subprocess
- Przechwytywanie danych wyjściowych
- Środowisko i moduł os
- shutil do operacji na plikach