1*73779f3dSLoGin pub struct StdioUtils; 2*73779f3dSLoGin 3*73779f3dSLoGin impl StdioUtils { 4*73779f3dSLoGin /// # 将标准错误输出转换为行列表 stderr_to_lines(stderr: &[u8]) -> Vec<String>5*73779f3dSLoGin pub fn stderr_to_lines(stderr: &[u8]) -> Vec<String> { 6*73779f3dSLoGin let stderr = String::from_utf8_lossy(stderr); 7*73779f3dSLoGin return stderr.lines().map(|s| s.to_string()).collect(); 8*73779f3dSLoGin } 9*73779f3dSLoGin 10*73779f3dSLoGin /// 获取标准错误输出的最后n行, 以字符串形式返回. 11*73779f3dSLoGin /// 如果标准错误输出的行数小于n, 则返回所有行. tail_n_str(lines: Vec<String>, n: usize) -> String12*73779f3dSLoGin pub fn tail_n_str(lines: Vec<String>, n: usize) -> String { 13*73779f3dSLoGin let mut result = String::new(); 14*73779f3dSLoGin let start = if lines.len() > n { lines.len() - n } else { 0 }; 15*73779f3dSLoGin for line in lines.iter().skip(start) { 16*73779f3dSLoGin result.push_str(line); 17*73779f3dSLoGin result.push_str("\n"); 18*73779f3dSLoGin } 19*73779f3dSLoGin return result; 20*73779f3dSLoGin } 21*73779f3dSLoGin } 22