我看到了这个问题In Rust, how do I invoke a system command and capture its output?,但似乎已经发生了变化。那么我现在如何在Rust中运行外部进程呢?
答案 0 :(得分:1)
您是否尝试过std::io::process::Command
?
你可以试试像。
let process = match std::io::process::Command::new("ls")
.args(&["-l", "/home/hduser"])
.spawn() {
Ok(process) => process,
Err(err) => panic!("Running process error: {}", err),
};
let output = match process.wait_with_output() {
Ok(output) => output,
Err(err) => panic!("Retrieving output error: {}", err),
};
let stdout = match std::string::String::from_utf8(output.output) {
Ok(stdout) => stdout,
Err(err) => panic!("Translating output error: {}", err),
};
print!("{}", stdout);
你不必产生这个过程,但这是Rust擅长的,所以为什么不呢。 Command::new
返回Option
,wait_with_output()
返回IoResult
,from_utf8
返回Result
,因此我使用匹配表达式来解包结果,但您可以轻松使用.ok().expect("Some descriptive text for error")
而不是匹配表达式。
没有spawn和match表达式的示例:
let process = std::io::process::Command::new("pwd")
.output()
.ok()
.expect("Failed to execute");
let out = std::string::String::from_utf8(process.output)
.ok()
.expect("Failed to read"));
println!("{}", out);