我不清楚"放置"在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(为空)。为什么?发生了什么事?
答案 0 :(得分:2)
实际上,两个puts
语句都没有打印。如果你这样做:
puts "YY#{result}YY"
puts "XX#{result}XX"
您会看到自己获得YYYY
和XXXX
。
您看到Java输出的原因是因为Java本身正在打印到stderr,而Ruby并没有将其捕获。
答案 1 :(得分:0)
第一个puts result
仅打印换行符。输出来自以下行(通过命令本身,打印到stderr)
result=`#{command}`
您可以通过删除所有puts ...
行来确认。