Eseguire comandi con subprocess
Eseguire programmi esterni
Eseguire comandi con subprocess è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 1 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.
Che cos'è subprocess?
Il modulo subprocess consente al programma Python di eseguire comandi esterni e altri programmi, proprio come quando li si digita in un terminale.
import subprocess
result = subprocess.run(['echo', 'hello'])
print('return code:', result.returncode)Nozioni di base su subprocess.run
subprocess.run() è il punto di ingresso consigliato. Passi il comando come una lista di argomenti: prima il nome del programma, poi ogni argomento separatamente.
import subprocess
result = subprocess.run(['echo', 'one', 'two'])
print('done with code', result.returncode)Perché una lista e non una stringa?
Passare una lista evita che la shell analizzi il comando, prevenendo errori nelle virgolette e rischi di shell injection. Ogni elemento corrisponde a un argomento.
import subprocess
# Safe: each piece is its own argument
subprocess.run(['echo', 'a file with spaces.txt'])L'oggetto CompletedProcess
run() restituisce un CompletedProcess che contiene args, returncode e, se è stato acquisito, l'output. Il codice 0 indica il successo.
import subprocess
cp = subprocess.run(['true'])
print('args:', cp.args)
print('returncode:', cp.returncode)Controllare i codici di ritorno
Un codice di ritorno diverso da zero indica generalmente che il comando non è riuscito. Può controllarlo manualmente dopo la chiamata.
import subprocess
cp = subprocess.run(['ls', '/no/such/path'])
if cp.returncode != 0:
print('command failed with', cp.returncode)Generare un'eccezione in caso di errore con check=True
Passi check=True per fare in modo che run() generi automaticamente CalledProcessError quando il comando termina con un valore diverso da zero.
import subprocess
try:
subprocess.run(['false'], check=True)
except subprocess.CalledProcessError as e:
print('failed with code', e.returncode)Passaggio degli argomenti
Gli argomenti aggiuntivi del comando sono semplicemente altri elementi della lista. Qui elenchiamo una directory in formato dettagliato.
import subprocess
subprocess.run(['echo', '-n', 'no newline'])
print()
print('above echo had -n flag')Impostare un timeout
Usi timeout per interrompere un comando che impiega troppo tempo. Verrà generata l'eccezione TimeoutExpired.
import subprocess
try:
subprocess.run(['sleep', '5'], timeout=0.1)
except subprocess.TimeoutExpired:
print('command took too long, aborted')Directory di lavoro
L'argomento cwd esegue il comando in una directory specifica senza modificare la directory di lavoro del programma.
import subprocess
subprocess.run(['pwd'], cwd='/tmp')L'opzione shell=True
Con shell=True si passa una singola stringa di comando interpretata dalla shell. Questo abilita pipe e glob, ma è rischioso con input non attendibili. Preferisca la forma con la lista.
import subprocess
subprocess.run('echo hello && echo world', shell=True)Evitare os.system
Il vecchio os.system restituisce solo un codice di uscita e non offre un passaggio sicuro degli argomenti né l'acquisizione dell'output. Per tutto il nuovo codice, lo sostituisca con subprocess.run.
import subprocess
# Modern, safe approach
cp = subprocess.run(['echo', 'modern way'])
print('exit code:', cp.returncode)Verifica rapida
Verifichi la Sua comprensione dell'esecuzione dei comandi.
Ripasso
Ha imparato a eseguire comandi con subprocess:
subprocess.run([...])esegue un programma esterno in modo sicuro.- Restituisce un
CompletedProcessconreturncode. check=Truegenera un'eccezione in caso di errore;timeoutinterrompe i comandi lenti.- Preferisca la forma con la lista a
shell=True.
Avanti: acquisire l'output del comando.
Domande Frequenti
La lezione «Eseguire comandi con subprocess» è gratuita?
Sì — il testo completo di «Eseguire comandi con subprocess» è 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 «Eseguire comandi con subprocess»?
Eseguire programmi esterni 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 1 di 4.
Quanto tempo richiede la lezione «Eseguire comandi con subprocess»?
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