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

时间:2013-10-10 08:18:11

标签: 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}

然后打印: 错误:

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?

1 个答案:

答案 0 :(得分:0)

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

他们似乎不太可能改变它,因为bug report得到了这个回复(2001年):

  

在修复此错误之前,我们应该非常非常仔细地思考。它的   将版本信息打印到stderr显然是错误的,但是从那以后   我们一直在这样做,因为我们可能会开始   如果我们现在改变它,就打破基于Java构建的现有系统。

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