簡體   English   中英

System.err有什么意義?

[英]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”?)。 這里的“標准錯誤”是什么?

每個正在運行的程序都有這三個流:

  • 標准輸入(stdin),通常來自鍵盤。 暴露為System.in
  • 標准輸出(標准輸出),通常進入控制台。 公開為System.out
  • 標准錯誤(stderr),通常也會進入控制台。 暴露為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()仍然會進入屏幕。 這有助於調試。

幾乎每個流程都有三個數據流:

  • 標准輸入:這是從終端,控制台,來自另一個進程的管道輸出或其他方式輸入到程序中的流。
  • 標准錯誤:這是所有調試和錯誤消息的去向。 這樣可以很容易地從程序的常規輸出中單獨捕獲這種信息。 Web服務器通過stderrerror_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM