当有人只想得到一个简单命令的输出,比如ls
,那么他可以这样写:
let output = Command::new("ls")
.stdout(Stdio::piped())
.output()
.unwrap();
let stdout = String::from_utf8(output.stdout).unwrap();
然而,如果我想获得一个无限运行的程序的输出,如http-server
,它不会停止,直到我手动杀死它。因此,如果我使用上面的方法,我的项目将永远停留在那里。在这种情况下我该怎么办?更具体地说,如何获得前五秒或前五行的输出。
使用.stdout(Stdio::piped()).spawn().unwrap().stdout.unwrap()
并从中读取。如果您想阅读前五行,请使用BufReader
和BufRead::lines()
。前五秒钟比较棘手,您要么需要在单独的线程中进行读取,要么需要非阻塞读取。
游乐场