首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.err的意义是什么?

System.err的意义是什么?
EN

Stack Overflow用户
提问于 2014-01-18 07:13:35
回答 2查看 52.7K关注 0票数 22

在UNIX中,我应该编写一个Java文件,该文件将把"EXIT 1“输出到标准错误,然后以状态1退出。

这是我的方法..

代码语言:javascript
复制
System.err.println("EXIT 1");
System.exit(1);

这是我应该做的吗?

如果是这样,我应该如何在Unix shell中使用它?当我在bash中编译和运行它时,它只输出"EXIT 1“(所以它做的事情和System.out.println一样,为什么我要使用”err“呢?)这里的“标准错误”是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-18 08:46:47

每个正在运行的程序都有这三个流:

标准输入(

  • Standard input,stdin),通常来自键盘。以标准输出( System.in
  • Standard out )的形式公开,通常会转到控制台。暴露为标准错误( System.out
  • Standard error,stderr),通常也会转到控制台。暴露为System.err

您的程序是正确的-它确实打印到stderr。但在正常情况下,stderr流就像stdout流一样进入控制台,因此它们在视觉上无法区分。

但是,您应该使用stderr而不是stdout处理错误消息的原因是重定向。这意味着您将stderr发送到文件而不是控制台。同时,stdout不会受到影响,因为这两个流是独立的。

例如,您可以在bash、cmd、PowerShell等中执行此操作:

代码语言:javascript
复制
$ java Program 2> errors.txt

现在,所有使用System.err.println()的输出都将在errors.txt中结束,而System.out.println()仍将显示在屏幕上。这有助于调试。

票数 33
EN

Stack Overflow用户

发布于 2014-01-18 08:10:05

几乎每个进程都有三个数据流:

错误标准输入:这是程序的输入流,可以是来自终端、控制台、来自另一个进程的管道输出,也可以是其他一些means.

  • Standard

  • :这是所有调试和错误消息都应该出现的地方。这样就可以很容易地将这类信息从程序的常规输出中分离出来。

服务器通过将错误消息通过输出发送到error_log文件来做到这一点,而正常的日志文件将是例如stderr输出:这是运行程序的用户期望看到的所有典型的、预期的输出出现的地方。

标准输出(stdout)和标准误差(stderr)几乎总是分别来自进程的第一个和第二个输出流。这使我可以执行类似/path/to/my/neat/program > logs/program.log 2> logs/program.err的操作,并对输出和错误进行很好的排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21197737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档