¿Hay alguna forma de invocar un comando del sistema, como lso fuseren Rust? ¿Qué tal capturar su salida?
Respuestas:
std::process::Command permite eso.
Hay varias formas de generar un proceso hijo y ejecutar un comando arbitrario en la máquina:
spawn - ejecuta el programa y devuelve un valor con detallesoutput - ejecuta el programa y devuelve la salidastatus - ejecuta el programa y devuelve el código de salidaUn ejemplo simple de los documentos:
use std::process::Command;
Command::new("ls")
.arg("-l")
.arg("-a")
.spawn()
.expect("ls command failed to start");
un ejemplo muy claro de los documentos :
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());
¡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);
ProcessOptionsLos descriptores de archivo estándar están predeterminados enNone (crear una nueva tubería), por lo que puede usar process.output()(por ejemplo) para leer su salida.
Si desea ejecutar el comando y obtener toda su producción después de que se ha hecho, no hay wait_with_outputde que .
Process::new, a partir de ayer, devuelve an en Option<Process>lugar de a Process, por cierto.
std::io::processlugar (respuesta a continuación).
std::processpartir de rustc 1.19.0.
outputfunción devuelve Vec después de completar el proceso. Entonces, en caso de que ejecutemos algo comoCommand("ping google.com"). ¿Es posible obtener esta salida de comandos, ya que no terminará, pero quiero imprimir sus registros? Por favor recomiende.