Метод stderr
Метод stderr используется для настройки
стандартного потока ошибок (stderr) дочернего
процесса. Он позволяет указать, как должен
обрабатываться вывод ошибок запускаемой программы.
Параметром метод принимает значение типа
Stdio, которое определяет способ обработки
потока.
Синтаксис
Command::new(program).stderr(stdio)
Пример
Давайте запустим команду ls и перенаправим
её поток ошибок в тот же канал, что и стандартный
вывод:
use std::process::{Command, Stdio};
fn main()
{
let output = Command::new("ls")
.stderr(Stdio::piped())
.output()
.expect("failed to execute process");
println!("status: {}", output.status);
println!("stderr: {}", String::from_utf8_lossy(&output.stderr));
}
Результат выполнения кода:
status: exit status: 0
stderr: ""
Пример
Давайте запустим команду, которая гарантированно выдаст ошибку, и перехватим её поток ошибок:
use std::process::{Command, Stdio};
fn main()
{
let output = Command::new("ls")
.arg("/nonexistent_path_xyz")
.stderr(Stdio::piped())
.output()
.expect("failed to execute process");
println!("status: {}", output.status);
println!("stderr: {}", String::from_utf8_lossy(&output.stderr));
}
Результат выполнения кода:
status: exit status: 2
stderr: "ls: cannot access '/nonexistent_path_xyz': No such file or directory\n"
Пример
Давайте подавим поток ошибок, перенаправив его
в Stdio::null:
use std::process::{Command, Stdio};
fn main()
{
let output = Command::new("ls")
.arg("/nonexistent_path_xyz")
.stderr(Stdio::null())
.output()
.expect("failed to execute process");
println!("status: {}", output.status);
println!("stderr: {:?}", String::from_utf8_lossy(&output.stderr));
}
Результат выполнения кода:
status: exit status: 2
stderr: ""