Acquisire l'output
Leggere stdout e stderr
Acquisire l'output è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.
Acquisire stdout
Per leggere ciò che stampa un comando, passi capture_output=True. Il testo sarà disponibile nell'attributo stdout del risultato.
import subprocess
cp = subprocess.run(['echo', 'hello'], capture_output=True)
print(cp.stdout)Byte e testo
Per impostazione predefinita, l'output è costituito da byte. Passi text=True per ottenere invece stringhe decodificate, che di solito sono ciò che serve.
import subprocess
cp = subprocess.run(['echo', 'hello'], capture_output=True, text=True)
print(repr(cp.stdout))Rimuovere la nuova riga finale
L'output dei comandi spesso termina con una nuova riga. Usi .strip() per rimuoverla prima di utilizzare il valore.
import subprocess
cp = subprocess.run(['echo', 'value'], capture_output=True, text=True)
clean = cp.stdout.strip()
print('[' + clean + ']')Acquisire stderr
Gli errori vengono generalmente inviati a stderr, che viene acquisito separatamente. In questo modo l'output normale e i messaggi di errore rimangono distinti.
import subprocess
cp = subprocess.run(['ls', '/no/such/dir'], capture_output=True, text=True)
print('stdout:', repr(cp.stdout))
print('stderr:', cp.stderr.strip())Usare l'output nel codice
L'output acquisito è semplicemente una stringa, quindi può analizzarlo: dividere le righe, convertire i numeri o passarlo al resto del programma.
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)Reindirizzare stderr a stdout
Per unire l'output degli errori al flusso normale, imposti stderr=subprocess.STDOUT. Entrambi saranno quindi disponibili in stdout.
import subprocess
cp = subprocess.run(['ls', '/no/such/dir'], stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, text=True)
print(cp.stdout.strip())Fornire l'input
Passi i dati allo stdin di un comando con l'argomento input. Qui inviamo del testo a cat.
import subprocess
cp = subprocess.run(['cat'], input='piped in\n', capture_output=True, text=True)
print(cp.stdout.strip())La scorciatoia check_output
subprocess.check_output() esegue un comando e restituisce direttamente il suo stdout, generando un'eccezione in caso di errore. È una comoda soluzione in una sola riga per acquisire l'output.
import subprocess
out = subprocess.check_output(['echo', 'quick'], text=True)
print(out.strip())Scartare l'output
Per silenziare un comando, reindirizzi i suoi flussi a subprocess.DEVNULL.
import subprocess
cp = subprocess.run(['echo', 'silent'], stdout=subprocess.DEVNULL)
print('return code only:', cp.returncode)Gestire gli errori con l'output
Quando si usa check=True, l'eccezione CalledProcessError generata contiene comunque output e stderr acquisiti, utili per la diagnosi.
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())Mettere tutto insieme
Una funzione di supporto tipica esegue un comando, ne verifica la riuscita e restituisce testo ripulito. Questo esempio racchiude il modello più comune.
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']))Verifica rapida
Verifichi la Sua comprensione dell'acquisizione dell'output.
Ripasso
Ha imparato ad acquisire l'output:
capture_output=Trueinsieme atext=Trueforniscestdoutestderrcome stringhe.- Unisca i flussi con
stderr=subprocess.STDOUT; li silenzi conDEVNULL. - Fornisca l'input tramite
input=;check_outputè una scorciatoia. - Gli errori contengono l'output acquisito per il debugging.
Avanti: leggere le variabili d'ambiente e usare il modulo os.
Domande Frequenti
La lezione «Acquisire l'output» è gratuita?
Sì — il testo completo di «Acquisire l'output» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.
Cosa imparerò in «Acquisire l'output»?
Leggere stdout e stderr Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Python Academy?
Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Acquisire l'output»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Python Academy?
Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Eseguire comandi con subprocess
- Acquisire l'output
- Ambiente e modulo os
- shutil per le operazioni sui file