【发布时间】:2022-01-17 07:29:13
【问题描述】:
我正在编写一个具有特定日志记录要求的函数。我想捕获Command::new() 调用的输出并将其保存到文件中。为了简单起见,我在这里使用echo。
fn sys_command(id: &str) -> u64 {
let mut cmd = Command::new("echo")
.args(&[id])
.stdout(Stdio::piped())
.spawn()
.expect("failed to echo");
let stdout = cmd.stdout.as_mut().unwrap();
let stdout_reader = BufReader::new(stdout);
// let log_name = format!("./tmp/log/{}.log", id);
// fs::write(log_name, &stdout_reader);
println!("{:?}", stdout_reader.buffer());
cmd.wait().expect("failed to call");
id.parse::<u64>().unwrap()
}
如何捕获输出并将其保存到文件中?我做了一个游乐场here。我的println! 调用返回[]。
即使读取另一个缓冲区也会打印错误的值。下面,sys_command("10") 打印 3。 Here's 更新后的游乐场。
fn sys_command(id: &str) -> u64 {
let mut buffer = String::new();
let mut cmd = Command::new("echo")
.args(&[id])
.stdout(Stdio::piped())
.spawn()
.expect("failed to echo");
let stdout = cmd.stdout.as_mut().unwrap();
let mut stdout_reader = BufReader::new(stdout);
let result = stdout_reader.read_to_string(&mut buffer);
println!("{:?}", result.unwrap());
cmd.wait().expect("failed to draw");
id.parse::<u64>().unwrap()
}
我错过了什么?
【问题讨论】:
标签: rust io child-process