18 个版本

0.4.13 2024 年 8 月 14 日
0.4.12 2024 年 2 月 9 日
0.4.10 2023 年 12 月 28 日
0.4.9 2023 年 7 月 6 日
0.2.0 2022 年 3 月 16 日

15命令行界面

Download history 1053209/week @ 2024-05-02 1030547/week @ 2024-05-09 1067999/week @ 2024-05-16 1040432/week @ 2024-05-23 1171252/week @ 2024-05-30 1179496/week @ 2024-06-06 1187647/week @ 2024-06-13 1189326/week @ 2024-06-20 1173041/week @ 2024-06-27 1098418/week @ 2024-07-04 1176938/week @ 2024-07-11 1179046/week @ 2024-07-18 1193728/week @ 2024-07-25 1146587/week @ 2024-08-01 1205383/week @ 2024-08-08 1039810/week @ 2024-08-15

4,799,430 每月下载量
4,857 个 crate(104 个直接) 中使用

MIT 许可证

17KB
272

is-terminal

判断给定的流是否是终端

Github Actions CI Status crates.io page docs.rs docs

从 Rust 1.70 版本开始,大多数用户应使用 Rust 标准库中的 IsTerminal trait,而不是这个 crate。

在 Unix 平台上,这个 crate 现在使用 libc,因此实现与 std 中的实现相匹配。希望使用基于 rustix 的实现的用户可以使用 rustix-is-terminal crate。


is-terminal 是一个简单的工具,回答一个问题

这是一个终端吗?

“终端”,也称为“tty”,是一个可能交互式并可能支持颜色和其他特殊功能的 I/O 设备。这个 crate 不提供这些功能;它只回答这个问题。

在 Unix 家族平台上,这实际上与测试给定流是否为终端的 isatty 函数相同,尽管它接受高级流类型而不是原始文件描述符。

在 Windows 上,它使用各种技术来确定给定的流是否为终端。

这个 crate 是基于 atty crate,并应用了 PR #51 错误修复和 PR #54 windows-sys 端口。唯一的额外区别是,atty crate 只接受 stdin、stdout 或 stderr,而此 crate 接受任何流。特别是,此 crate 不会访问未传递给它的任何流,符合 I/O 安全

示例

use is_terminal::IsTerminal;

fn main() {
    if std::io::stdout().is_terminal() {
        println!("Stdout is a terminal");
    } else {
        println!("Stdout is not a terminal");
    }
}

测试

此库在 Unix 家族和 Windows 平台上都进行了测试。

要手动在平台上测试它,请使用提供的 stdio 示例程序。正常运行时,它打印以下内容

$ cargo run --example stdio
stdin? true
stdout? true
stderr? true

要测试 stdin,将一些文本管道到程序

$ cat | cargo run --example stdio
stdin? false
stdout? true
stderr? true

要测试标准输出(stdout),请将程序管道化到某个地方

$ cargo run --example stdio | cat
stdin? true
stdout? false
stderr? true

要测试标准错误(stderr),请将程序管道化到某个地方并重定向stderr

$ cargo run --example stdio 2>&1 | cat
stdin? true
stdout? false
stderr? false

最低支持的Rust版本(MSRV)

此crate目前适用于Debian稳定版上的Rust版本,当前为Rust 1.63。此策略可能会在未来的小版本发布中发生变化,因此使用固定Rust版本的用户应将此crate固定到特定版本。

依赖项

~0–8.5MB
~61K SLoC