当输出通过管道传输到终端以外的其他地方时,我想禁用颜色。
从 Rust 1.70 开始,std::io::IsTerminal可用:
use std::io::IsTerminal;
fn main() {
dbg!(std::io::stdout().is_terminal());
}
Run Code Online (Sandbox Code Playgroud)
或者,crossterm 有一个 is_tty() 方法,并且还有is-terminal crate(一个维护的 fork atty)。
翻译成 POSIX 语言,您的问题将是:“stdout 不是 TTY”,因此 *nix 上的答案可以通过!isatty(STDOUT_FILENO). 在libc的箱子可以用来锈菌调用它。
在 Windows 上,它很复杂,所以最好使用atty crate。