C'è un modo per invocare un comando di sistema, come lso fuserin Rust? Che ne dici di catturarne l'output?
Risposte:
std::process::Command lo consente.
Esistono diversi modi per generare un processo figlio ed eseguire un comando arbitrario sulla macchina:
spawn - esegue il programma e restituisce un valore con i dettaglioutput - esegue il programma e restituisce l'outputstatus - esegue il programma e restituisce il codice di uscitaUn semplice esempio dalla documentazione:
use std::process::Command;
Command::new("ls")
.arg("-l")
.arg("-a")
.spawn()
.expect("ls command failed to start");
un esempio molto chiaro dai documenti :
use std::process::Command;
let output = Command::new("/bin/cat")
.arg("file.txt")
.output()
.expect("failed to execute process");
println!("status: {}", output.status);
println!("stdout: {}", String::from_utf8_lossy(&output.stdout));
println!("stderr: {}", String::from_utf8_lossy(&output.stderr));
assert!(output.status.success());
È davvero possibile! Il modulo pertinente è std::run.
let mut options = std::run::ProcessOptions::new();
let process = std::run::Process::new("ls", &[your, arguments], options);
ProcessOptions'descrittori di file standard per impostazione predefinitaNone (crea un nuovo pipe), quindi puoi semplicemente usare process.output()(ad esempio) per leggere dal suo output.
Se vuoi eseguire il comando e ottenere tutto il suo output dopo che è stato fatto, c'è wait_with_outputper quello .
Process::new, a partire da ieri, restituisce an Option<Process>invece di a Process, tra l'altro.
std::io::processinvece (risposta sotto).
std::processora come di rustc 1.19.0.
outputfunzione restituisca Vec dopo il completamento del processo. Quindi, nel caso in cui eseguiamo qualcosa di simileCommand("ping google.com"). È possibile ottenere l'output di questo comando poiché non finirà, ma voglio stampare i suoi log. Per favore suggerisci.