1

出力をstderrにスローするコマンドの出力に対して、Rubyで「puts」がどのように機能するかは明確ではありません。

このコードを見てください:

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 を使用する必要があることを認識しています)

私の質問: 実際には変数「結果」は空ですが、最初の puts は stderr 出力を出力し、2 番目の puts は stdout (空です) を出力します。なんで?どうしたの?

4

2 に答える 2

2

実際、どちらのputsステートメントも何も出力しません。これを行う場合:

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

YYYYとが得られることがわかりますXXXX

Java からの出力が表示される理由は、Java 自体が Ruby によってキャプチャされていない stderr に出力されているためです。

于 2015-08-14T00:24:38.903 に答える