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 在 命令行界面 中
4,799,430 每月下载量
在 4,857 个 crate(104 个直接) 中使用
17KB
272 行
从 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