sacar - como hacer team en rust
¿Cómo invoco un comando del sistema en Rust y capturo su salida? (3)
¡De hecho es posible! El módulo relevante es std::run
.
let mut options = std::run::ProcessOptions::new();
let process = std::run::Process::new("ls", &[your, arguments], options);
ProcessOptions
descripciones de archivo estándar de ProcessOptions
tienen por defecto None
(crean una nueva tubería), por lo que puede usar process.output()
(por ejemplo) para leer desde su salida.
Si desea ejecutar el comando y obtener toda su salida después de que esté listo, hay wait_with_output
para eso .
Process::new
, a partir de ayer, devuelve una Option<Process>
lugar de un Process
, por cierto.
¿Hay alguna manera de invocar un comando del sistema, como ls
o fuser
en Rust? ¿Qué hay de capturar su producción?
un ejemplo muy claro de los std::process::Command :
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());
std::process::Command
permite eso.
Hay varias formas de engendrar un proceso secundario y ejecutar un comando arbitrario en la máquina:
-
spawn
: ejecuta el programa y devuelve un valor con detalles -
output
: ejecuta el programa y devuelve la salida -
status
: ejecuta el programa y devuelve el código de salida
Un ejemplo simple de los documentos:
use std::process::Command;
Command::new("ls")
.arg("-l")
.arg("-a")
.spawn()
.expect("ls command failed to start");