Java:为什么在Java/Groovy中运行该命令时该命令的输入是错误的

Java:为什么在Java/Groovy中运行该命令时该命令的输入是错误的,java,groovy,Java,Groovy,代码是: Process p = "java -Xmx128M -version".execute() Process p = "ls\ndir".execute() p.inputStream.eachLine { println it} println "error:" p.errorStream.eachLine { println it} 然后打印: 错误: 为什么输出在errorStream中,而不是inputStream中?我同意要求java打印其版本不是错误,但这只是他们从一开始

代码是:

Process p = "java -Xmx128M -version".execute()
Process p = "ls\ndir".execute()
p.inputStream.eachLine { println it}
println "error:"
p.errorStream.eachLine { println it}
然后打印: 错误:


为什么输出在errorStream中,而不是inputStream中?

我同意要求java打印其版本不是错误,但这只是他们从一开始就做出的决定。我认为大多数应用程序都将版本打印到标准输出,但至少有一些应用程序将其打印到标准输出;e、 python和gcc似乎打印到stderr,ruby打印到stdout

他们似乎不太可能改变它,因为a在2001年得到了这样的答复:

在修复此错误之前,我们应该非常仔细地考虑。它是 显然,将版本信息打印到stderr是错误的,但是 我们从一开始就在做这件事,看来我们很可能 如果我们现在改变它,就要打破建立在Java之上的现有系统


所以他们承认这样做可能是错误的,但不会改变。该错误标记为“无法修复”。

是的。但是,事实上,这个错误似乎是JVM不允许程序调用java命令,不仅仅是命令“java-version”不,java被调用,并且执行的操作与在命令行上完全相同——它将版本打印到stderr。例如,您可以在bash或类似的工具中试用:
java-version>java\u version.out 2>java\u version.err
——java\u version.out的内容为空,而
java\u version.err
包含与您得到的内容相同的输出。
java version "1.6.0_23"
Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode)