Apakah ada cara untuk menjalankan perintah sistem, seperti ls
atau fuser
di 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_output
untuk itu .
Process::new
, seperti kemarin, mengembalikan Option<Process>
bukan a Process
, omong-omong.
std::io::process
saja (jawaban di bawah).
std::process
sekarang seperti dari rustc 1.19.0.
output
fungsi 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.