Почему ржавчина std :: process :: Command.output () не закрывает мой поток ввода для интерактивных программ? - PullRequest
0 голосов
/ 22 марта 2019

Вот пример. Я попытаюсь использовать мою программу Rust для переноса scp:

fn spawn_scp(host: &str, path: &str) -> std::process::Output {
    let a = vec![format!("{}:{}",host, path), format!("{}-gc.log",host)];

    let output = Command::new("scp")
        .args(&a)
        .output()
        .ok().expect("Failed to execute.");
    return output;
}

Если я передаю неизвестный хост и какой-то путь, scp должен дать мне отпечаток ключа хоста, а затем спросить у меня пароль, который он делает:

Are you sure you want to continue connecting (yes/no)

И это позволяет мне набрать «да» и продолжить. Но из std :: process :: Command docs :

Stdin не наследуется от родительского, и любая попытка дочернего процесса прочитать из потока stdin приведет к немедленному закрытию потока.

Почему это позволяет мне печатать "да" вместо закрытия?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...