How do I prefix Command stdout with [stdout] and [sterr]?
使用Command结构,如何为stdout和stderr缓冲区添加前缀?
我希望输出看起来像这样:
1 2 | [stdout] things are good. [sterr] fatal: repository does not exist. |
这也可以应用到程序的主标准输出,因此程序打印的所有内容都带有这样的前缀。
这是我目前拥有的代码:
1 2 3 | let output = Command::new("git").arg("clone").output().unwrap_or_else(|e| { panic!("Failed to run git clone: {}", e) }); |
我不相信您现在可以做自己真正想做的事情。 理想情况下,您将能够为
如果可以删除stdout / stderr的交错,那么此解决方案可以帮助您:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | use std::io::{BufRead,BufReader}; use std::process::{Command,Stdio}; fn main() { let mut child = Command::new("/tmp/output") .stdout(Stdio::piped()) .stderr(Stdio::piped()) .spawn().unwrap(); if let Some(ref mut stdout) = child.stdout { for line in BufReader::new(stdout).lines() { let line = line.unwrap(); println!("[stdout] {}", line); } } if let Some(ref mut stderr) = child.stderr { for line in BufReader::new(stderr).lines() { let line = line.unwrap(); println!("[stderr] {}", line); } } let status = child.wait().unwrap(); println!("Finished with status {:?}", status); } |