Apakah ada cara untuk menjalankan perintah sistem, seperti lsatau fuserdi Rust? Bagaimana dengan menangkap hasilnya?
Jawaban:
std::process::Command memungkinkan untuk itu.
Ada beberapa cara untuk menelurkan proses turunan dan menjalankan perintah arbitrer di mesin:
spawn - menjalankan program dan mengembalikan nilai dengan detailoutput - menjalankan program dan mengembalikan hasilnyastatus - menjalankan program dan mengembalikan kode keluarSatu contoh sederhana dari dokumen:
use std::process::Command;
Command::new("ls")
.arg("-l")
.arg("-a")
.spawn()
.expect("ls command failed to start");
contoh yang sangat jelas dari dokumen :
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());
Itu memang mungkin! Modul yang relevan adalah std::run.
let mut options = std::run::ProcessOptions::new();
let process = std::run::Process::new("ls", &[your, arguments], options);
ProcessOptions'deskriptor file standar default keNone (buat pipa baru), jadi Anda bisa menggunakan process.output()(misalnya) untuk membaca dari outputnya.
Jika Anda ingin menjalankan perintah dan mendapatkan semua outputnya setelah selesai, ada wait_with_outputuntuk itu .
Process::new, seperti kemarin, mengembalikan Option<Process>bukan a Process, omong-omong.
std::io::processsaja (jawaban di bawah).
std::processsekarang seperti dari rustc 1.19.0.
outputfungsi mengembalikan Vec setelah proses selesai. Jadi, jaga-jaga jika kita menjalankan sesuatu sepertiCommand("ping google.com"). Apakah ini mungkin untuk mendapatkan keluaran perintah ini karena tidak akan selesai tetapi saya ingin mencetak lognya. Mohon saran.