มีวิธีเรียกใช้คำสั่งระบบเช่นls
หรือfuser
ใน Rust หรือไม่? แล้วการจับเอาท์พุทล่ะ?
มีวิธีเรียกใช้คำสั่งระบบเช่น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
เมื่อวานนี้จะคืนค่า an Option<Process>
แทน a Process
โดยวิธีการ
std::io::process
แทน (คำตอบด้านล่าง)
std::process
ในขณะนี้เป็นของ 1.19.0 rustc
output
ฟังก์ชันคืนค่า Vec หลังจากเสร็จสิ้นกระบวนการCommand("ping google.com")
ดังนั้นในกรณีถ้าเราทำงานบางอย่างเช่น เป็นไปได้ไหมที่จะได้รับเอาต์พุตคำสั่งนี้เนื่องจากจะไม่เสร็จสิ้น แต่ฉันต้องการพิมพ์บันทึก ช่วยแนะนำหน่อยครับ.