2

代码是:

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

然后它打印:错误:

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)

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

4

1 回答 1

0

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

他们似乎不太可能改变它,因为一个错误报告得到了这个回复(在 2001 年):

在修复这个错误之前,我们应该非常非常仔细地考虑。将版本信息打印到 stderr 显然是错误的,但由于我们从一开始就一直这样做,如果我们现在更改它,我们似乎很可能会破坏基于 Java 构建的现有系统。

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

于 2013-10-10T11:17:20.637 回答