在UNIX中,我应该编写一个Java文件,该文件将把"EXIT 1“输出到标准错误,然后以状态1退出。
这是我的方法..
System.err.println("EXIT 1");
System.exit(1);这是我应该做的吗?
如果是这样,我应该如何在Unix shell中使用它?当我在bash中编译和运行它时,它只输出"EXIT 1“(所以它做的事情和System.out.println一样,为什么我要使用”err“呢?)这里的“标准错误”是什么?
发布于 2014-01-18 08:46:47
每个正在运行的程序都有这三个流:
标准输入(
System.inSystem.outSystem.err您的程序是正确的-它确实打印到stderr。但在正常情况下,stderr流就像stdout流一样进入控制台,因此它们在视觉上无法区分。
但是,您应该使用stderr而不是stdout处理错误消息的原因是重定向。这意味着您将stderr发送到文件而不是控制台。同时,stdout不会受到影响,因为这两个流是独立的。
例如,您可以在bash、cmd、PowerShell等中执行此操作:
$ java Program 2> errors.txt现在,所有使用System.err.println()的输出都将在errors.txt中结束,而System.out.println()仍将显示在屏幕上。这有助于调试。
发布于 2014-01-18 08:10:05
几乎每个进程都有三个数据流:
错误标准输入:这是程序的输入流,可以是来自终端、控制台、来自另一个进程的管道输出,也可以是其他一些means.
服务器通过将错误消息通过输出发送到error_log文件来做到这一点,而正常的日志文件将是例如stderr输出:这是运行程序的用户期望看到的所有典型的、预期的输出出现的地方。
标准输出(stdout)和标准误差(stderr)几乎总是分别来自进程的第一个和第二个输出流。这使我可以执行类似/path/to/my/neat/program > logs/program.log 2> logs/program.err的操作,并对输出和错误进行很好的排序。
https://stackoverflow.com/questions/21197737
复制相似问题