Ruby:打印命令结果的stderr

时间:2015-08-14 00:19:05

标签: ruby variables stderr 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)

我的问题:变量"结果"实际上是空的,但第一个put打印stderr输出,第二个放stdout(为空)。为什么?发生了什么事?

2 个答案:

答案 0 :(得分:2)

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

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

您会看到自己获得YYYYXXXX

您看到Java输出的原因是因为Java本身正在打印到stderr,而Ruby并没有将其捕获。

答案 1 :(得分:0)

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

result=`#{command}`

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