我执行命令:
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()
错误消息?
Err
返回自output()
意味着生成过程失败。这对于过程本身的成功/失败没有任何意义。您需要检查ExitStatus
:
if !o.status.success() {
// Probably print stderr and bail.
}
Run Code Online (Sandbox Code Playgroud)