🦞

Rustで外部コマンドでパイプを使う方法

2024/10/11に公開

以下のような感じでできる。テキストファイルを入力にすることもできるみたい。

use std::process::{Command, Stdio};
use std::fs::File;

fn main() {
    // echo '1+2+3+4' | bc
    let echo = Command::new("echo")
        .arg("1+2+3+4")
        .stdout(Stdio::piped())
        .spawn()
        .unwrap();

    let bc1 = Command::new("bc")
        .stdin(Stdio::from(echo.stdout.unwrap()))
        .output()
        .unwrap();

    println!("{}", String::from_utf8_lossy(&bc1.stdout)); // 10


    // (1+2+3+4)*5
    let file = File::open("expression.txt").unwrap();
    let bc2 = Command::new("bc")
        .stdin(file)
        .output()
        .unwrap();
    println!("{}", String::from_utf8_lossy(&bc2.stdout)); // 50
}

参考
https://doc.rust-lang.org/std/process/struct.Stdio.html

Discussion