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"

但是当我尝试在 IRB 中用 Java 做同样的事情时,我可以看到它打印到屏幕上但它没有返回。

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)

在命令行工作时,这是一种非常常见的技术。man sh在命令行执行 a ,并REDIRECTION使用 " /REDIRECTION" 搜索并从那里读取。

于 2012-08-24T21:40:02.757 回答