我应该向STDERR或STDOUT输出警告吗?

Stu*_*ley 26 warnings stdout stderr

我正在创建一个处理预定义数据集的脚本,输出到文件.我想在一个数据(在我有权访问的每个集合中始终为"常规")不同时声明该值未处理(因为我不知道它如何影响数据)时弹出警告.我应该将此警告输出到stderr或stdout吗?

Mar*_*off 29

如果我保存了这个脚本的输出(即仅限stdout)以便我以后可以处理它,那么该警告会干扰输出的解析方式吗?此外,如果输出通过管道传输到另一个进程,则警告应显示在终端上,以便用户立即看到它.

出于这些原因,通常,您会向stderr输出警告.


Mic*_*erg 6

警告应该发给stderr.

除了其他人提出的要点(导致下游进程的解析错误以及在控制台上隐藏用户的错误)之外,还存在一个灵活性问题.

如果用户不希望来自stderr的警告转到正在解析stdout的下游进程,则他们不必执行任何特殊操作.

your_script | downstream_process
Run Code Online (Sandbox Code Playgroud)

如果用户希望来自stderr的警告转到将解析stdout和stderr的下游进程,则用户可以使用2>&1将stderr重定向到stdout.

your_script 2>&1 | downstream_process
Run Code Online (Sandbox Code Playgroud)

如果同时向stdout输出警告和任何正常数据,则用户无法在不解析所有内容的情况下将警告与数据分离.因此,向stderr发送警告也会为您的脚本提供更大的灵活性.