命令行“;java版本;是否将结果发送到stdOut或stdErr?

命令行“;java版本;是否将结果发送到stdOut或stdErr?,java,winapi,Java,Winapi,我正在编写使用Win32 API检测java版本的代码。例如 基本上,我在关注MSDN 这是伪客户端代码: ASSERT(GetJavaVersion("C:\Program Files (x86)\Java\jdk1.7.0_17\bin\java.exe") == "1.7.0_25"); 我可以得到如下结果: java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b17) Java HotSpot

我正在编写使用Win32 API检测java版本的代码。例如

基本上,我在关注MSDN

这是伪客户端代码:

ASSERT(GetJavaVersion("C:\Program Files (x86)\Java\jdk1.7.0_17\bin\java.exe") == "1.7.0_25");
我可以得到如下结果:

java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b17)
Java HotSpot(TM) Client VM (build 23.25-b01, mixed mode, sharing)
然而,结果是从stdErr返回的,而我认为它应该从stdOut返回


从stdErr接收字符串有意义吗?

答案是stdErr。我们可以分别重定向stderr和stdout并查看

$ java -version 2>stderr.txt 1>stdout.txt
$ cat stderr.txt 
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
您还可以将stderr重定向到stdout

$ java -version 2>&1

这将允许您从stdout读取它。

正是我想知道的。您知道为什么它会写入StdErr吗?一定有原因。我不确定,也许命令行参数处理在默认情况下会在stderr上生成输出(可能是用于日志记录)。请注意,
java-help
也在stderr上。为什么?历史原因。请参阅上面的dup链接。为什么?上面说它去哪里了?您期望的基础是什么?我不知道Java使用stdout或stderr的转换。我的基础是在运行期间,“似乎”没有发生错误,因此很直观地期望它转到stdout。
$ java -version 2>&1