0Pricing
Python Academy · Lezione

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 CompletedProcess con returncode.
  • check=True genera un'eccezione in caso di errore; timeout interrompe 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

  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