#stdout #stderr #stdio #redirect #silent #io-read

shh

静音stderr和stdout,可选地重定向它

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

Download history 116/week @ 2024-03-13 210/week @ 2024-03-20 252/week @ 2024-03-27 179/week @ 2024-04-03 208/week @ 2024-04-10 148/week @ 2024-04-17 177/week @ 2024-04-24 215/week @ 2024-05-01 139/week @ 2024-05-08 215/week @ 2024-05-15 152/week @ 2024-05-22 128/week @ 2024-05-29 130/week @ 2024-06-05 115/week @ 2024-06-12 230/week @ 2024-06-19 113/week @ 2024-06-26

每月下载量 613
用于 9 个crate (4个直接使用)

MIT 协议

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