4个版本
0.1.3 | 2019年5月2日 |
---|---|
0.1.2 | 2019年5月2日 |
0.1.1 | 2019年5月2日 |
0.1.0 | 2019年5月1日 |
#867 in Unix API
每月 2,155 次下载
用于 4 crates
15KB
168 代码行
stdio-override
一个Rust库,用于轻松覆盖Rust中的Stdio文件描述符
用法
将其添加到您的 Cargo.toml
[dependencies]
stdio-override = "0.1"
对于Rust Edition 2015,请将以下内容添加到您的crate根目录
extern crate stdio_override;
Rust Edition 2018中,您可以直接这样做
use stdio_override::*;
以下是一个将stdout写入文件的示例
use std::{fs::read_to_string, io};
use stdio_override::StdoutOverride;
fn main() -> io::Result<()> {
let file_name = "./readme_test.txt";
let guard = StdoutOverride::override_file(file_name)?;
println!("12345");
drop(guard);
let contents = read_to_string(file_name)?;
assert_eq!("12345\n", contents);
println!("Outside!");
Ok(())
}
您可以使用相同的方式处理套接字
use std::{
io::Read,
net::{TcpListener, TcpStream},
};
use stdio_override::StdoutOverride;
fn main() {
let address = ("127.0.0.1", 5543);
let listener = TcpListener::bind(address).unwrap();
let socket = TcpStream::connect(address).unwrap();
let guard = StdoutOverride::override_raw(socket).unwrap();
println!("12345");
drop(guard);
let mut contents = String::new();
let (mut stream, _) = listener.accept().unwrap();
stream.read_to_string(&mut contents).unwrap();
assert_eq!("12345\n", contents);
println!("Outside!");
}
两者都将对Stderr
起作用,如果您想从文件/套接字读取Stdin
,可以执行以下操作
use std::{fs::{File, read_to_string}, io::{self, Write}};
use stdio_override::StdinOverride;
fn main() -> io::Result<()> {
let file_name = "./test_inputs.txt";
{
let mut file = File::create(&file_name)?;
file.write_all(b"Data")?;
}
let guard = StdinOverride::override_file(file_name)?;
let mut inputs = String::new();
io::stdin().read_line(&mut inputs)?;
drop(guard);
assert_eq!("Data", inputs);
// Stdin is working as usual again, because the guard is dropped.
Ok(())
}
依赖项
~45KB