Apakah ada cara untuk menjalankan perintah sistem, seperti ls
atau fuser
di Rust? Bagaimana dengan menangkap hasilnya?
91
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");
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.spawn
disebutkan dalam jawaban ini, menampilkanChild
hasil dengan aliran I / O standar.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());
sumber
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 menggunakanprocess.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, mengembalikanOption<Process>
bukan aProcess
, omong-omong.sumber
std::io::process
saja (jawaban di bawah).std::process
sekarang seperti dari rustc 1.19.0.