#command-output #command #error-message #status-command #error #process

command-error

针对 std::process::Command 的详细错误信息和状态检查

4个版本 (2个破坏性更新)

0.4.0 2024年3月28日
0.3.0 2024年3月22日
0.2.1 2024年3月21日
0.2.0 2024年3月21日

#494 in 文本处理

每月下载量 27次
2 crate 中使用

MIT 许可证

61KB
927

command-error

docs.rs Crates.io

std::process::Command 提供详细错误信息、状态码检查和UTF-8解码的扩展trait。


lib.rs:

command_error 提供了 CommandExt trait,用于运行命令并检查其退出状态

use std::process::Command;
use command_error::CommandExt;

let err = Command::new("sh")
    .args(["-c", "echo puppy; false"])
    .output_checked_utf8()
    .unwrap_err();

assert_eq!(
    err.to_string(),
    indoc!(
        "`sh` failed: exit status: 1
        Command failed: `sh -c 'echo puppy; false'`
        Stdout:
          puppy"
    )
);

错误信息详细且有用。还提供了额外的功能,用于覆盖默认的成功逻辑(对于认为 2 是合理退出码的奇怪工具)以及用于转换输出(例如,将命令输出解析为JSON,同时在错误信息中保留有关生成输出的命令的信息)。

强制使用 command_error

如果您想确保在项目中使用 CommandExt 方法而不是纯 Command 方法,您可以将此段代码添加到项目根目录下的 clippy.toml

[[disallowed-methods]]
path = "std::process::Command::output"
reason = "Use command_error::CommandExt::output_checked[_with][_utf8]"

[[disallowed-methods]]
path = "std::process::Command::status"
reason = "Use command_error::CommandExt::status_checked[_with]"

[[disallowed-methods]]
path = "std::process::Command::spawn"
reason = "Use command_error::CommandExt::spawn_checked"

[[disallowed-methods]]
path = "std::process::Child::try_wait"
reason = "Use command_error::ChildExt::try_wait_checked[_with]"

[[disallowed-methods]]
path = "std::process::Child::wait"
reason = "Use command_error::ChildExt::wait_checked[_with]"

[[disallowed-methods]]
path = "std::process::Child::wait_with_output"
reason = "Use command_error::ChildExt::output_checked[_with][_utf8]"

依赖关系

~140KB