在Rust中运行外部进程

时间:2014-10-21 02:31:04

标签: rust

我看到了这个问题In Rust, how do I invoke a system command and capture its output?,但似乎已经发生了变化。那么我现在如何在Rust中运行外部进程呢?

1 个答案:

答案 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返回Optionwait_with_output()返回IoResultfrom_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);
相关问题