两个子进程之间的管道

2023-12-10

我想在两个子进程之间实现管道来执行类似的事情env | grep USER。这是我已经拥有但不起作用的:

let mut child1 = Command::new(cmd1)
    .args(args1)
    .stdout(Stdio::piped())
    .spawn()
    .unwrap();

let pipe = child1.stdout.take().unwrap();
let mut child2 = Command::new(cmd2)
    .args(args2)
    .stdin(pipe)
    .stdout(Stdio::piped())
    .spawn()
    .unwrap();

它没有显示任何错误。


在深入研究 Rust 源代码和文档后(似乎文档没有清楚地涵盖这个用例),我找到了一种无需unsafe代码或外部库。

尝试这样的事情:

use std::error::Error;
use std::process::{Command, Stdio};

fn main() -> Result<(), Box<dyn Error>> {
    let child1 = Command::new("ls")
        .stdout(Stdio::piped())
        .spawn()
        .unwrap();

    let mut child2 = Command::new("wc")
        .stdin(Stdio::from(child1.stdout.unwrap()))
        .spawn()
        .unwrap();

    child1.wait()?;
    child2.wait()?;
    Ok(())
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个子进程之间的管道 的相关文章

随机推荐