Hea*_*low 9 io-redirection rust
我正在尝试使用CommandAPI 启动进程并将其标准输出重定向到标准错误.以下失败:
Command::new("tput").arg("rc")
.stdout(io::stderr())
.status()
.expect("failed to run tput");
Run Code Online (Sandbox Code Playgroud)
因为Command::new("tput").arg("rc").stdout(<XXX>)期望std::process::Stdio:
expected struct `std::process::Stdio`, found struct `std::io::Stderr`
Run Code Online (Sandbox Code Playgroud)
Bash中的等价物可能是tput rc > /dev/stderr.
我想知道如何正确地做到这一点.
从Rust 1.15.0开始,Stdio不会在可移植API中公开此功能,但是可以使用特定于平台的扩展特征来实现此目的.
在类Unix平台,在std::os::unix::io::FromRawFd性状上实现Stdio.此特征提供了一种方法,from_raw_fd可以将文件描述符转换为实现特征的类型.由于标准错误被定义为文件描述符2,您可以简单地使用.stdout(Stdio::from_raw_fd(2)).
在Windows上,有一个类似的特性叫做FromRawHandle实现Stdio.不幸的是,它没有在在线文档中列出; 它只包含特定于Unix的变体.您可以调用GetStdHandle(STD_ERROR_HANDLE)以获取标准错误的句柄.