2012-04-27 79 views
2

我目前正在编写一个需要输出java jar的ruby应用程序。如何用ruby获取java输出

我目前无法使用open3从java命令获得任何输出。

但是,我用'ls'成功地测试了下面的ruby代码。我也尝试使用java的绝对路径:'/ opt/java/jre/bin/java'没有成功。

谢谢你,提前

+0

也许有输出等待从标准错误 – theglauber 2012-04-27 16:41:48

+0

读为[尼古拉斯B.](http://stackoverflow.com/users/916657/niklas-b)已经应答,'的java -version'写入'STDERR' 。如果这不能解释您遇到的问题,请更新问题以显示更接近您要执行的jar的内容。 – mikej 2012-04-27 16:44:57

+0

是的......我猜测命令与jar文件输出一个错误(要么没有找到jar文件,或其他一些事情出错了,可能是CLASSPATH中缺少的东西)。无法确定没有更多的信息。 – theglauber 2012-04-27 16:48:52

回答

4

java -version写至标准错误,所以下面应该工作:

@output = stderr.read 

在Linux上,你可以在输出由supressing或者STDERR或去壳检查STDOUT:

java -version >/dev/null 

仍然打印信息。

+0

我工作过,非常感谢你=)我一直对我的头撞了一个小时大声笑 – 2012-04-27 16:49:41

0

你需要open3吗?在Ruby 1.9,我会做:

pipe = IO.popen([ '/path/to/java', '-jar', '/path/to/jarfile.jar', 
       {SDTERR=>STDOUT} ] 
pipe.close_write 
puts pipe.readlines 

但是往往有很多更多的这个运行Java程序(设置CLASSPATH,例如);因此运行运行Java程序的shell脚本可能会更好。