Ce face Command::status
status() pornește procesul și așteaptă să se termine. Procesul copil moștenește intrarea și ieșirile programului tău, deci ce scrie apare direct în terminal. Primești înapoi un ExitStatus: success() spune dacă codul a fost 0, iar code() dă codul (sau None dacă procesul a fost oprit de un semnal).
Este potrivit pentru pași dintr-un script de build sau de instalare: rulezi o comandă, utilizatorul vede ce face, iar tu te oprești dacă a eșuat.
Ce returnează
io::Result<ExitStatus>.
Exemple
Exemplul 1: Ieșirea copilului apare direct
use std::process::Command;
fn main() -> std::io::Result<()> {
println!("pornesc comanda...");
let status = Command::new("echo").arg("Salut de la procesul copil").status()?;
println!("terminată: {status}, succes: {}", status.success());
Ok(())
}
Rezultat
pornesc comanda...
Salut de la procesul copil
terminată: exit status: 0, succes: true
Exemplul 2: Oprește-te la primul pas care eșuează
Al doilea pas se termină cu codul 1, deci al treilea nu mai rulează.
use std::process::Command;
fn main() -> std::io::Result<()> {
let pasi = [
("verificare", "echo verific fișierele"),
("teste", "echo rulez testele; exit 1"),
("publicare", "echo public"),
];
for (nume, script) in pasi {
let status = Command::new("sh").args(["-c", script]).status()?;
if !status.success() {
println!("pasul „{nume}” a eșuat cu codul {:?}; mă opresc", status.code());
break;
}
println!("pasul „{nume}” a reușit");
}
Ok(())
}
Rezultat
verific fișierele
pasul „verificare” a reușit
rulez testele
pasul „teste” a eșuat cu codul Some(1); mă opresc
Greșeli frecvente
- Folosești
status()și apoi vrei textul scris de program: nu este păstrat. Pentru text foloseșteoutput(). - Ignori
ExitStatus: comanda poate eșua fără ca programul tău să observe.
Comenzi înrudite
Command: Pornește alt program (proces copil): new() alege programul, arg() și args() adaugă argumente.Command::output: Rulează programul, așteaptă să termine și returnează codul de ieșire și tot ce a scris pe stdout și stderr.Command::spawn: Pornește programul și returnează imediat un Child, fără să aștepte; poți comunica cu el și îl aștepți mai târziu.process::exit: Oprește imediat programul cu codul de ieșire dat (0 = succes, altceva = eroare), fără să mai ruleze restul codului.