Command::status în Rust

Rulează programul, îl lasă să scrie direct în terminal și returnează doar felul în care s-a terminat.

Sintaxă
fn status(&mut self) -> io::Result<ExitStatus>

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ște output().
  • 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.