क्या सिस्टम कमांड को लागू करने का एक तरीका है, जैसे ls
या fuser
जंग में? कैसे इसके उत्पादन पर कब्जा करने के बारे में?
जवाबों:
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
, जैसा कि कल, के Option<Process>
बजाय एक वापसी करता Process
है, वैसे।
std::io::process
बजाय देखें (नीचे उत्तर)।
std::process
अब जंगी 1.19.0 के रूप में है।
output
प्रक्रिया पूरी होने के बाद फंक्शन रिटर्न वीईसी। तो, अगर हम ऐसा कुछ चलाते हैंCommand("ping google.com")
। क्या यह इस कमांड आउटपुट को प्राप्त करना संभव है क्योंकि यह खत्म नहीं होगा लेकिन मैं इसके लॉग को प्रिंट करना चाहता हूं। कृपया सुझाव दे।