ccutils::cmd::IsOk 处理 Command 的结果和输出

Signed-off-by: Jia Chao <jiac13@chinaunicom.cn>
This commit is contained in:
Jia Chao 2024-08-26 15:09:11 +08:00
parent edfeda766e
commit 0d56cda3b3
2 changed files with 40 additions and 0 deletions

37
src/cmd.rs Normal file
View File

@ -0,0 +1,37 @@
// 定义一个名为 IsOk 的 trait
// 该 trait 包含两个方法is_ok 和 result
pub trait IsOk {
// is_ok 方法用于检查操作是否成功,如果成功则返回 Ok(()),
// 否则返回包含错误信息的 Err。
fn is_ok(self) -> crate::Result<()>;
// result 方法用于返回操作的结果字符串,
// 如果操作成功则返回包含输出的 Ok(String),
// 否则返回包含错误信息的 Err(String)。
fn result(self) -> crate::Result<String>;
}
// 为 std::process::Output 实现 IsOk trait
impl IsOk for std::process::Output {
// is_ok 方法的实现
fn is_ok(self) -> crate::Result<()> {
// 如果命令执行成功status 为成功),返回 Ok(())
if self.status.success() {
Ok(())
} else {
// 否则将标准错误输出转化为 String 并返回 Err(String)
Err(String::from_utf8(self.stderr).unwrap().into())
}
}
// result 方法的实现
fn result(self) -> crate::Result<String> {
// 如果命令执行成功,返回标准输出的字符串形式 Ok(String)
if self.status.success() {
String::from_utf8(self.stdout).map_err(|e| e.into())
} else {
// 否则返回标准错误输出的字符串形式 Err(String)
Err(String::from_utf8(self.stderr).unwrap().into())
}
}
}

View File

@ -1,6 +1,9 @@
use tokio::runtime::Runtime;
use tracing_subscriber::{fmt, EnvFilter};
/// linux 下的 cmd 命令执行处理函数
pub mod cmd;
/// 放置了一些基础的函数集合
pub mod util;