5个版本 (2个稳定版)
1.0.1 | 2020年1月19日 |
---|---|
1.0.0 | 2019年3月16日 |
0.1.2 | 2019年3月16日 |
0.1.1 | 2019年3月16日 |
0.1.0 | 2019年3月16日 |
#1 in #silent
每月下载量 613
用于 9 个crate (4个直接使用)
17KB
272 行
(Rust) 静音stderr和stdout,可选地重定向它。
stdout 静音
println!("STDOUT GAGGING", );
println!("you will see this");
let shh = shh::stdout().unwrap();
println!("but not this");
drop(shh);
println!("and this");
stderr 静音
println!("STDERR GAGGING", );
eprintln!("you will see this");
let shh = shh::stderr().unwrap();
eprintln!("but not this");
drop(shh);
eprintln!("and this");
重定向示例
println!("REDIRECTING", );
use std::io::{Read, Write};
std::thread::spawn(move || {
let mut shh = shh::stdout().unwrap();
let mut stderr = std::io::stderr();
loop {
let mut buf = Vec::new();
shh.read_to_end(&mut buf).unwrap();
stderr.write_all(&buf).unwrap();
}
});
println!("This should be printed on stderr");
eprintln!("This will be printed on stderr as well");
// This will exit and close the spawned thread.
// In most cases you will want to setup a channel and send a break signal to the loop,
// and then join the thread back into it once you are finished.
作用域
结构体 Shh
实现了 Drop
特性。当超出作用域时,重定向会被重置,资源会被清理。一个 Shh
只会存在于作用域内,如果没有使用局部变量,静音将不会生效。
示例 - 提前丢弃的静音
println!("you will see this");
shh::stdout().unwrap(); // Shh struct is created, and dropped, here
println!("and expect not to see this, but you will");
要解决这个问题,只需分配一个局部变量
println!("you will see this");
let shh = shh::stdout().unwrap(); // Shh struct is created here
println!("and expect not to see this");
drop(shh); // and dropped here
println!("now it works!");
依赖项
~215KB