Ok() 正在处理匹配表达式中的错误消息,而不是 Err()

ale*_*nco -1 command rust

我执行命令:

use std::process::Command;

pub fn search(query: &str, flag: &str) -> Vec<String> {
    let command = format!("xdotool search --onlyvisible {} {}", flag, query);
    let output = Command::new("sh").arg("-c").arg(command).output();

    match output {
        Ok(o) => {
            println!("Success message: {:?}", o);

            String::from_utf8_lossy(&o.stdout)
                .lines()
                .map(|s| s.to_owned())
                .collect()
        }
        Err(err) => {
            eprintln!(
                "Error message: {:?}",
                String::from_utf8_lossy(&err.to_string().as_bytes())
                    .trim()
                    .to_owned()
            );
            Vec::new()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用错误,我会收到一条错误消息,但它正在函数中flag处理:Ok()search()

Success message: Output { status: ExitStatus(unix_wait_status(256)), stdout: "", stderr: "search: unrecognized ...
Run Code Online (Sandbox Code Playgroud)

为什么是这样?以及如何处理Err()错误消息?

Cha*_*man 7

Err返回自output()意味着生成过程失败。这对于过程本身的成功/失败没有任何意义。您需要检查ExitStatus

if !o.status.success() {
    // Probably print stderr and bail.
}
Run Code Online (Sandbox Code Playgroud)