Есть ли способ , чтобы вызвать системную команду, как lsи fuserв Rust? Как насчет записи его вывода?
Ответы:
std::process::Command позволяет это.
Есть несколько способов вызвать дочерний процесс и выполнить произвольную команду на машине:
spawn - запускает программу и возвращает значение с деталямиoutput - запускает программу и возвращает результатstatus - запускает программу и возвращает код выходаОдин простой пример из документации:
use std::process::Command;
Command::new("ls")
.arg("-l")
.arg("-a")
.spawn()
.expect("ls command failed to start");
очень четкий пример из документов :
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::run.
let mut options = std::run::ProcessOptions::new();
let process = std::run::Process::new("ls", &[your, arguments], options);
ProcessOptions'стандартные файловые дескрипторы по умолчаниюNone (создать новый канал), поэтому вы можете просто использовать process.output()(например) для чтения из его вывода.
Если вы хотите , чтобы выполнить команду и получить всю свою продукцию после того, как это сделано, есть wait_with_outputдля этого .
Process::new, по состоянию на вчерашний день, кстати , возвращает Option<Process>вместо Process.
std::io::processВместо этого (ответ ниже).
std::processверсия rustc 1.19.0.
outputфункция возвращает Vec после завершения процесса. Итак, если мы запустим что-то вродеCommand("ping google.com"). Возможно ли получить этот вывод команд, поскольку он не будет завершен, но я хочу распечатать его журналы. Пожалуйста, предложите.