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

Warnings 我应该向STDERR或STDOUT输出警告吗?,warnings,stdout,stderr,Warnings,Stdout,Stderr,我正在制作一个脚本来处理一组预定义的数据,并输出到一个文件。我想弹出一个警告,当一个数据(在我访问过的每个数据集中总是“常规”的)不同时,说明这个值未处理(因为我不知道它如何影响数据)。我应该将此警告输出到stderr或stdout吗?如果我保存此脚本的输出(即仅限stdout),以便以后处理它,该警告会干扰输出的解析方式吗?此外,如果输出通过管道传输到另一个进程,那么警告应该显示在终端上,以便用户立即看到它 出于这些原因,通常情况下,您会将警告输出到stderr。真正的问题是:如果有人将脚本的

我正在制作一个脚本来处理一组预定义的数据,并输出到一个文件。我想弹出一个警告,当一个数据(在我访问过的每个数据集中总是“常规”的)不同时,说明这个值未处理(因为我不知道它如何影响数据)。我应该将此警告输出到stderr或stdout吗?

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


出于这些原因,通常情况下,您会将警告输出到stderr。

真正的问题是:如果有人将脚本的输出重定向到文件,您希望将警告放在文件中还是指向用户


如果您希望用户因警告而采取一些操作,则应转到STDERR。如果某个下游脚本可能被警告绊倒,则应转到STDERR

该警告应转到stderr

除了其他人提出的观点(导致下游进程的解析错误并在控制台向用户隐藏错误)之外,还存在灵活性问题

如果用户不希望来自stderr的警告转到正在解析stdout的下游进程,那么他们不需要做任何特殊的事情

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

your_script 2>&1 | downstream_process
如果将警告和任何正常数据都输出到stdout,则用户无法在不解析所有内容的情况下将警告与数据分离。
因此,将警告发送到stderr也为脚本提供了更大的灵活性。

所以不管怎样,它都应该转到stderr?或者你是想让两个对STDERR的引用中的一个成为STDOUT吗?我是说两个都是STDERR。在这两种情况下,您几乎必须将其发送给stderr。我唯一想让它转到stdout的时候是,如果脚本的输出是供人使用的(可能您将通过电子邮件将输出发送给某人查看),并且您可能希望警告跟随输出,而不必记住重定向stderr。