Rust 如何忽略打印到标准输出错误?

问题描述 投票:0回答:1

如何忽略 Rust 中的管道错误?在 C 语言中,这是免费的:

user@localhost:~ $ cat main.c
#include <stdio.h>
int main(){printf("Hello World!\n");}
user@localhost:~ $ clang main.c -o main
user@localhost:~ $ ./main.exe | echo && echo $?

0
user@localhost:~ $

但是对于 Rust,它的默认行为是对坏管道感到恐慌:

user@localhost:~ $ cat main.rs
fn main(){println!("Hello World!");}
user@localhost:~ $ rustc main.rs
user@localhost:~ $ ./main.exe | echo && echo $?

thread 'main' panicked at library\std\src\io\stdio.rs:1021:9:
failed printing to stdout: The pipe is being closed. (os error 232)
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
0
user@localhost:~ $

这篇文章建议重置

SIGPIPE
处理程序,但这对我来说没有用,因为我在Windows上。我在 MSYS2 中运行
zsh
作为我的 shell,但底层操作系统仍然是 Windows,因此符号
libc::SIGPIPE
仍然无法解析 - 而且我从 CMD 或 powershell 运行程序时遇到相同的错误,所以我怀疑这是外壳问题。

有没有办法让我的 Rust 程序像我的 C 程序一样忽略

SIGPIPE
错误?

windows rust signals msys2 sigpipe
1个回答
0
投票

您可以使用

writeln!
宏代替
println!
并自行处理(或忽略)错误:

fn main() {
    let stdout = std::io::stdout();
    // ignore errors (assign to _ to silence the warning)
    let _ = writeln!(stdout, "Hello World!");
    // println! essentially calls `writeln!(...).unwrap()`
}
© www.soinside.com 2019 - 2024. All rights reserved.