Метод stdin
Метод stdin класса Command настраивает
стандартный поток ввода (stdin) для дочернего процесса.
Параметром метод принимает значение типа Stdio,
которое определяет, как будет обрабатываться ввод:
наследоваться от родителя, быть перенаправленным в канал
или игнорироваться. Метод возвращает изменяемую ссылку
на Command, что позволяет использовать цепочку вызовов.
Синтаксис
command.stdin(cfg)
Пример
Давайте запустим команду cat и передадим ей
строку через стандартный ввод, используя Stdio::piped:
use std::process::{Command, Stdio};
use std::io::Write;
fn main()
{
let mut child = Command::new("cat")
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.spawn()
.expect("failed to spawn");
{
let stdin = child.stdin.as_mut().expect("failed to open stdin");
stdin.write_all(b"abcde").expect("failed to write");
}
let output = child.wait_with_output().expect("failed to wait");
let res = String::from_utf8_lossy(&output.stdout);
println!("{}", res);
}
Результат выполнения кода:
"abcde"
Пример
Давайте запретим ввод для дочернего процесса,
используя Stdio::null:
use std::process::{Command, Stdio};
fn main()
{
let output = Command::new("cat")
.stdin(Stdio::null())
.stdout(Stdio::piped())
.output()
.expect("failed to execute");
let res = String::from_utf8_lossy(&output.stdout);
println!("{:?}", res);
}
Результат выполнения кода:
""