我想知道,java stderr在哪里标准化了?
我知道我可以使用System.setErr更改stderr,'重新分配“标准”错误输出流。',但我不知道,哪一个是“标准”。
我想更多地指出我的问题: 我有我在java(jni)中使用的C ++库。问题是看起来我无法看到来自我的C ++库的输出到stderr。我在C ++库中调用assert(),当我运行使用该库的java api时,在控制台中看不到输出。
答案 0 :(得分:14)
它转到过程的标准错误流,无论设置是什么。
大多数平台允许您将标准错误流重定向到其他位置(例如,重定向到文本文件)。
System.setErr的想法是允许不使用进程本身的标准错误流,但更改它以便对System.err.println
等的调用转到给定的流
答案 1 :(得分:3)
默认情况下,System.err是控制台,就像System.out。
一样答案 2 :(得分:2)
来电者的文件描述符2。从哪里开始 - 取决于来电者。 在控制台上,您可以将其重定向到其他位置,例如:
java Example 2>> errors.log
答案 3 :(得分:0)
我刚刚编写了一个执行System.err.println
的小测试程序,它似乎会输出到控制台。
答案 4 :(得分:0)
这应该转到java.io.FileDescriptor.err http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileDescriptor.html
System.setErr(new PrintStream(new BufferedOutputStream(new FileOutputStream(java.io.FileDescriptor.err),128),true));
答案 5 :(得分:-1)
标准错误输出流进入控制台。此流已打开并准备接受输出数据。
有关详细信息,请参阅java sun api。