Rust gibi ls
veya fuser
Rust'ta bir sistem komutunu çağırmanın bir yolu var mı ? Çıktısını yakalamaya ne dersiniz?
Yanıtlar:
std::process::Command
buna izin verir.
Bir alt süreç oluşturmanın ve makinede rastgele bir komutu çalıştırmanın birden çok yolu vardır:
spawn
- programı çalıştırır ve ayrıntıları içeren bir değer döndürüroutput
- programı çalıştırır ve çıktıyı döndürürstatus
- programı çalıştırır ve çıkış kodunu döndürürDokümanlardan basit bir örnek:
use std::process::Command;
Command::new("ls")
.arg("-l")
.arg("-a")
.spawn()
.expect("ls command failed to start");
belgelerden çok net bir örnek :
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());
Gerçekten mümkün! İlgili modül std::run
.
let mut options = std::run::ProcessOptions::new();
let process = std::run::Process::new("ls", &[your, arguments], options);
ProcessOptions
Standart dosya tanımlayıcıları varsayılan olarakNone
(yeni bir kanal oluştur) şeklindedir, bu nedenle process.output()
(örneğin) çıktısından okumak için kullanabilirsiniz .
Komutu çalıştırmak ve tamamlandıktan sonra tüm çıktısını almak istiyorsanız, bunun wait_with_output
için var .
Process::new
, dün itibariyle, bu arada Option<Process>
, a yerine bir döndürüyor Process
.
std::io::process
onun yerine bakın (aşağıdaki yanıt).
std::process
rustc 1.19.0 itibariyle artık.
output
işlev, işlem tamamlandıktan sonra Vec döndürüyor. Yani, gibi bir şey çalıştırırsakCommand("ping google.com")
. Bitmeyeceği için bu komutların çıktısını almak mümkün mü, ancak günlüklerini yazdırmak istiyorum. Lütfen önerin.