Метод piped
Метод piped класса Stdio создаёт
канал ввода-вывода для дочернего процесса. Он
возвращает значение типа Stdio, которое
можно передать в методы stdin,
stdout или stderr класса
Command. При использовании этого режима
родительский процесс может читать вывод
дочернего процесса или записывать данные в его
стандартный ввод.
Параметров метод не принимает. Он возвращает готовую конфигурацию канала, которую можно напрямую использовать при настройке команды.
Синтаксис
Stdio::piped()
Пример
Давайте запустим команду echo и прочитаем
её вывод через канал, созданный методом
piped:
use std::process::{Command, Stdio};
fn main()
{
let output = Command::new("echo")
.arg("abcde")
.stdout(Stdio::piped())
.output()
.unwrap();
let res = String::from_utf8_lossy(&output.stdout);
println!("{}", res.trim());
}
Результат выполнения кода:
"abcde"
Пример
Давайте передадим данные в стандартный ввод
дочернего процесса через канал, созданный
методом piped:
use std::io::Write;
use std::process::{Command, Stdio};
fn main()
{
let mut child = Command::new("cat")
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.spawn()
.unwrap();
{
let stdin = child.stdin.as_mut().unwrap();
stdin.write_all(b"12345").unwrap();
}
let output = child.wait_with_output().unwrap();
let res = String::from_utf8_lossy(&output.stdout);
println!("{}", res);
}
Результат выполнения кода:
"12345"