0Pricing
Python Academy · Lezione

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=True insieme a text=True fornisce stdout e stderr come stringhe.
  • Unisca i flussi con stderr=subprocess.STDOUT; li silenzi con DEVNULL.
  • 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

  1. Eseguire comandi con subprocess
  2. Acquisire l'output
  3. Ambiente e modulo os
  4. shutil per le operazioni sui file
← Torna a Python Academy