2009-09-16 19 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會使腳本具有更大的靈活性。

相關問題