Skip to content

Latest commit

 

History

History
34 lines (25 loc) · 1.22 KB

continuous.zh.md

File metadata and controls

34 lines (25 loc) · 1.22 KB

连续处理,子进程的输出

[![std-badge]][std] [![cat-os-badge]][cat-os]

运行外部命令,并处理 stdout食谱中,stdout的处理会在外部Command完成之后执行。而本食谱接下来的方法是,调用Stdio::piped创建一个管道,并在BufReader每次更新,都读取stdout(连续)。

下面的食谱,相当于 unix shell 命令:journalctl | grep usb.

use std::process::{Command, Stdio};
use std::io::{BufRead, BufReader, Error, ErrorKind};

fn main() -> Result<(), Error> {
    let stdout = Command::new("journalctl")
        .stdout(Stdio::piped())
        .spawn()?
        .stdout
        .ok_or_else(|| Error::new(ErrorKind::Other,"Could not capture standard output."))?;

    let reader = BufReader::new(stdout);

    reader
        .lines()
        .filter_map(|line| line.ok())
        .filter(|line| line.find("usb").is_some())
        .for_each(|line| println!("{}", line));

     Ok(())
}