我正在尝试从进程内部重定向Stderr
文件描述符,但是似乎没有实现,并且我看不到从dup2
到类似Read
的任何东西的清晰路线C / C ++。
我尝试过:
impl Read for Stderr
(File
),但要覆盖整个代码库。使用文件描述符中的数据,然后放入ReadBuf
,然后进入trait FDReader {
fn consume(&mut self);
}
impl FDReader for Stderr {
fn consume(&mut self) {
let f = std::fs::File::from_raw_fd(self.as_raw_fd());
let mut extract = String::new();
BufReader::new(f).read_to_string(&mut extract);
}
}
consume
我专注于/proc/self/fd/2 -> /dev/null
,因为在测试代码时我不必完全返回任何内容,尽管这行不通。
因为我正在Linux系统上运行,并且我不打算发布代码,所以我还考虑了重定向libc::dup2
,然后在我想写到那里时返回原始指针引用。 。在该范围内,这已经超出了顶部。
我也考虑直接使用<div class="vsr">
<a href="/91.1/303535.html">L'Américain (intégral)</a> 8a
<span class="ag">7c+</span>
<em>Tony Fouchereau</em>
<span class="btype">traversée d-g, surplomb, départ assis</span>
<span class="glyphicon glyphicon-camera" aria-hidden="true"></span>
<span class="glyphicon glyphicon-film" aria-hidden="true"></span>
</div>
-尽管我对此感到厌倦。
答案 0 :(得分:4)
在标准库 1 中无法执行此操作。 gag crate允许将stderr或stdout重定向到文件或不重定向到任何文件,但仅适用于* nix系统。
从另一个角度来看问题,我建议您完全不直接使用stdout或stderr 。而是使用依赖注入传递可以写入的值。代替使用println
,而使用writeln
。
另请参阅:
1 这不是严格地。您是否注意到过stdout and stderr are not output during tests?这是因为编译器(和测试套件)利用a pair of unstable, hidden functions来允许更改stdout和stderr的线程本地实例。
另请参阅: