2 个不稳定版本
0.2.0 | 2024年2月16日 |
---|---|
0.1.0 | 2024年1月5日 |
#7 in #cli-command
7,677 每月下载量
用于 6 个 crate (3 直接)
17KB
253 代码行(不含注释)
axoprocess
更好的 CLI 命令调用默认设置。
许可证
许可协议为以下之一
- Apache 许可证 2.0 版 (LICENSE-APACHE 或 apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 opensource.org/licenses/MIT)
任选其一。
lib.rs
:
更好的 CLI 命令调用默认设置。
[Cmd
][] 是 std::process::Command
的包装器,API 几乎相同,但我们希望能够
- 生成更友好的错误信息,说明正在运行什么(使用
thiserror
/miette
) - 每次执行命令时都进行日志记录(默认为
tracing::info!
) - 自动检查返回状态的成功(可以通过
Cmd
选择退出)
如果您喜欢默认设置,那么您需要了解的只是一点:Cmd::new
的第二个参数是 "我应该告诉用户这个命令试图做什么(高层概述)"。
这让我们可以将以下逻辑
#
let mut cmd = Command::new("cargo");
cmd.arg("-V");
info!("exec {:?}", cmd);
let output = cmd.output()
.map_err(|cause| MyCmdError {
desc: "failed to get your cargo toolchain's version",
cause
})?;
if !output.status.success() {
Err(MyStatusError {
desc: "failed to get your cargo toolchain's version",
status: output.status
})?;
}
println!("version was {}", String::from_utf8_lossy(&output.stdout));
转换为这个
let output = Cmd::new("cargo", "get your cargo toolchain's version")
.arg("-V")
.output()?;
println!("version was {}", String::from_utf8_lossy(&output.stdout));
这要友好得多!
依赖项
~1.2–1.8MB
~29K SLoC