2009-09-16 18 views
21

我正在制作一个处理预定义数据集的脚本,输出到一个文件中。当一个数据(在每一组中我都可以访问的数据总是“Regular”)不同时,我想弹出一个警告,说明这个值是未处理的(因为我不知道它是如何影响数据的)。我应该将此警告输出到标准错误还是标准输出?我应该向STDERR还是STDOUT输出警告?

回答

27

如果我保存了此脚本的输出(即仅用于stdout)以便稍后处理它,那么该警告是否会干扰输出的解析?而且,如果将输出传送到另一个进程,警告应该显示在终端上,以便用户立即看到它。

由于这些原因,一般情况下,您会向stderr输出警告。

1

真正的问题是:如果有人将您的脚本的输出重定向到一个文件,您想要将警告置于文件中还是导向给用户?

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

+0

所以它应该去stderr不管?或者你是否打算将STDERR的两个引用之一作为STDOUT? – 2009-09-16 05:55:11

+0

我的意思是STDERR。他们是两种情况,你几乎必须将它发送到stderr。我能想到的唯一时间就是想让它进入stdout,如果脚本的输出是供人使用的(也许你会把输出发送给某人查看它),并且你可能需要警告输出时不必记得重定向stderr。 – Martin 2009-09-16 06:05:22

4

警告应该发送到stderr。

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

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

your_script | downstream_process 

如果用户希望从标准错误警告去到下游的过程,将解析输出和错误,用户可以使用2> & 1到stderr重定向到标准输出。

your_script 2>&1 | downstream_process 

如果输出警告和任何正常的数据到标准输出,用户分离数据的警告没有解析的一切没有什么好办法。 因此,将警告发送到stderr会使脚本具有更大的灵活性。

相关问题