1

我不清楚“puts”如何在 Ruby 中用于将其输出抛出到 stderr 的命令的输出。

看看这段代码:

command="/usr/bin/java -version"
result=`#{command}`

puts result
puts "XX#{result}XX"

结果是:

java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

XXXX

java -version 将其输出发送到 stderr (我知道为了防止这种情况,我应该在命令末尾使用 2>&1 )

我的问题:变量“结果”实际上是空的,但第一个输出打印标准错误输出,第二个输出标准输出(为空)。为什么?这是怎么回事?

4

2 回答 2

2

实际上,这两个puts语句都没有打印任何内容。如果你这样做:

puts "YY#{result}YY"
puts "XX#{result}XX"

你会看到你得到YYYYXXXX

您看到 Java 输出的原因是因为 Java 本身正在打印到 Ruby 未捕获的 stderr。

于 2015-08-14T00:24:38.903 回答
0

第一个puts result只打印换行符。输出来自以下行(通过命令本身,打印到 stderr)

result=`#{command}`

puts ...您可以通过删除所有行来确认。

于 2015-08-14T00:22:42.230 回答