[英]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.