[![std-badge]][std] [![cat-os-badge]][cat-os]
生成(Spawns)一个子进程,并重定向stdout
和stderr
到同一个文件。它与运行管道的外部命令差不多的想法,但会用process::Stdio
,把输出写入到指定的文件。File::try_clone
引用相同文件的stdout
和stderr
控制(Handle)。它将确保两个 Handles 使用相同的光标位置写入。
下面的食谱,相当于运行 unix shell 命令:ls . oops >out.txt 2>&1
.
use std::fs::File;
use std::io::Error;
use std::process::{Command, Stdio};
fn main() -> Result<(), Error> {
let outputs = File::create("out.txt")?;
let errors = outputs.try_clone()?;
Command::new("ls")
.args(&[".", "oops"])
.stdout(Stdio::from(outputs))
.stderr(Stdio::from(errors))
.spawn()?
.wait_with_output()?;
Ok(())
}