1

IRB を実行していて、http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-60に記載されているメソッドを使用して Ruby バージョンを返すと、正常に動作します。

irb(main):001:0> %x{ruby -v}
=> "ruby 1.9.2p290 (2011-07-09) [i386-mingw32]\n"

しかし、Java を使用して IRB で同じことを実行しようとすると、画面に出力されますが、戻りません。

irb(main):002:0> %x{java -version}
java version "1.6.0_27"
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
Java HotSpot(TM) 64-Bit Server VM (build 20.2-b06, mixed mode)
=> ""

Java がコンソールに出力するために使用している方法と、それを ruby​​/rails プログラム内で使用するためにキャプチャするにはどうすればよいですか?

4

1 に答える 1

4

JavaはSTDERRを使用してバージョン情報を出力しています。STDERRをSTDOUTのストリームにルーティングし、両方をキャプチャすることで、これを簡単にキャプチャできます。

asdf = `java -version 2>&1`
puts asdf

出力します:

java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b03-424-10M3720)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03-424, mixed mode)

これは、コマンドラインで作業する場合の非常に一般的な手法です。コマンドラインでaを実行し、 「」を使用してman sh検索し、そこから読み取ります。REDIRECTION/REDIRECTION

于 2012-08-24T21:40:02.757 に答える