繁体   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