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
94 每月下载量
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