1 个不稳定版本
0.4.11 | 2024年2月9日 |
---|
#514 在 命令行界面
17KB
260 行
截至 Rust 1.70 版,大多数用户应使用 Rust 标准库中的 IsTerminal
特性,而不是此 crate。
此 crate 与 is-terminal crate 类似,但在其实现中使用 rustix
而不是 libc
。这使得它能够在 Unix 类平台支持 no_std
。
rustix-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 rustix_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–10MB
~97K SLoC