1

別のアプリケーションを起動しようとすると、その標準入力に何かを書き込んでから、完了するのを待つと、私のコードは次のようになります (old_io):

let mut process = Command::new("example_app")
.arg("test").spawn().ok().expect("Failed.");

{
    let mut std = &mut process.stdin.as_mut().unwrap();
    std.write_all(input_example);
}

let output = process.wait_with_output().ok().expect("Failed.");

それは機能していますが、それが進むべき道だとは思いません。「&mut process.stdin.as_mut().unwrap()」は「プロセス」を借用しているように見えるので、再度アクセスする前にスコープ外になることを確認する必要がありますね。もう 1 つの質問は、「プロセス」を借用する必要があるのはなぜですか?"

4

2 に答える 2

1

ここで明示的な借用が必要だと判断した理由がわかりません。以下は完全に機能します。

use std::old_io::process::Command;

fn main() {
    let mut process = Command::new("tr")
        .arg("a-z").arg("A-Z")
        .spawn()
        .ok().expect("Failed.");

    let input_example = "hello world".as_bytes();

    process.stdin.as_mut().unwrap().write_all(input_example);

    let output = process.wait_with_output().ok().expect("Failed.");
    println!("Output:");
    println!("{}", String::from_utf8(output.output).unwrap());
}
于 2015-02-21T17:31:00.410 に答える