[英]What is the point of System.err?
在UNIX中,我應該編寫一個Java文件,將“EXIT 1”打印到標准錯誤,然后以狀態1退出。
這是我的方法..
System.err.println("EXIT 1");
System.exit(1);
這是我應該做的嗎?
如果是這樣,我怎么能在Unix shell中使用它? 當我在bash中編譯並運行它時,它只打印“EXIT 1”(所以它與System.out.println做同樣的事情,我為什么要使用“err”?)。 這里的“標准錯誤”是什么?
每個正在運行的程序都有這三個流:
System.in
System.out
System.err
你的程序是正確的 - 它打印到stderr。 但在正常情況下,stderr流就像stdout流一樣進入控制台,因此它們在視覺上無法區分。
但是,您應該使用stderr而不是stdout來處理錯誤消息的原因是重定向 。 這意味着您將stderr發送到文件而不是控制台。 同時,stdout將不受影響,因為這兩個流是獨立的。
例如,您可以在bash,cmd,PowerShell等中執行此操作:
$ java Program 2> errors.txt
現在, System.err.println()
所有輸出都將以errors.txt
,而System.out.println()
仍然會進入屏幕。 這有助於調試。
幾乎每個流程都有三個數據流:
stderr
向error_log
文件發送錯誤消息來執行此操作,而正常的日志文件將是例如access_log
。 標准輸出( stdout
)和標准錯誤( stderr
)幾乎總是分別來自進程的第一和第二輸出流。 這允許我做/path/to/my/neat/program > logs/program.log 2> logs/program.err
,並且輸出和錯誤排序很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.