#log-line #command-line #log #command #shell #task #posix

shell-candy

🍬 shell-candy 包装了 std::process::Command,提供了一种更简单的机制来处理单个日志行

9 个不稳定版本 (3 个破坏性更新)

0.4.0 2022年11月15日
0.3.0 2022年11月15日
0.2.3 2022年11月14日
0.2.1 2022年10月8日
0.1.3 2022年10月7日

#16 in #log-line

Download history 323/week @ 2024-03-13 463/week @ 2024-03-20 54/week @ 2024-03-27 48/week @ 2024-04-03 569/week @ 2024-04-10 195/week @ 2024-04-17 108/week @ 2024-04-24 320/week @ 2024-05-01 430/week @ 2024-05-08 757/week @ 2024-05-15 374/week @ 2024-05-22 56/week @ 2024-05-29 69/week @ 2024-06-05 14/week @ 2024-06-12 4/week @ 2024-06-19 4/week @ 2024-06-26

94 每月下载量

MIT 许可证

22KB
344 代码行

🍬 shell-candy

这个包包装了 std::process::Command,提供了一种更简单的机制来处理来自外部工具的单个日志行。

使用方法

此示例展示了 ShellTask 的基本使用方法:从一个 POSIX 风格的命令创建一个,然后使用你自行编写的日志行处理器运行它。此处理器可以持续处理每一行直到程序结束,或者可以在满足特定条件(如遇到无法恢复的错误)时提前返回并关闭程序。

你可以使用此函数将日志行通过自己的日志格式化程序传递,例如:

use anyhow::Result;
use shell_candy::{ShellTaskLog, ShellTaskBehavior, ShellTask};

fn main() -> Result<()> {
  let task = ShellTask::new("rustc --version")?;
  task.run(|line| {
    match line {
      ShellTaskLog::Stdout(message) | ShellTaskLog::Stderr(message) => eprintln!("info: {}", &message),
    }
    ShellTaskBehavior::<()>::Passthrough
  })?;
  Ok(())
}

你还可以使用此函数在命令满足特定条件时(如遇到无法恢复的错误)提前返回。

use anyhow::{anyhow, Error, Result};
use shell_candy::{ShellTaskLog, ShellTaskBehavior, ShellTask};

fn main() -> Result<()> {
  let task = ShellTask::new("git log")?;
  task.run(|line| {
    match line {
      ShellTaskLog::Stdout(message) | ShellTaskLog::Stderr(message) => {
        if message.contains("an error that is unlikely to be in your git logs but just might be") {
          return ShellTaskBehavior::<()>::EarlyReturn(Err(anyhow!("encountered an error while running 'git log'").into()));
        }
      },
    }
    ShellTaskBehavior::<()>::Passthrough
  })?;
  Ok(())
}

更多信息

有关更详细的信息和示例用法,请参阅文档

依赖关系

~3–12MB
~154K SLoC