Groovy中的系统调用失败

时间:2017-08-21 15:26:09

标签: java shell groovy processbuilder

我在Windows 10上使用

时正在探索Groovy
"java -version".execute().text

我没有输出,并且在使用以下方法检查错误输出时

def pb = new ProcessBuilder("java -version").redirectErrorStream(true);
def result = pb.start()
println result.text

它会:

Caught: java.io.IOException: Cannot run program "java -version": CreateProcess error=2, Den angivne fil blev ikke fundet
java.io.IOException: Cannot run program "java -version": CreateProcess error=2, Den angivne fil blev ikke fundet
at java_lang_ProcessBuilder$start$0.call(Unknown Source)
at test$_run_closure2.doCall(test.groovy:59)
at test.run(test.groovy:51)                                                                                            

似乎Groovy完全忽略了PATH,只搜索当前目录。例如,如果我在同一目录中创建批处理文件,Groovy将运行它。但是,如果我尝试传递任何参数,它就会失败。似乎Groovy将参数解释为文件名的一部分。

感觉Groovy无论是猥亵无能还是我以错误的方式接近这个问题......

我习惯在Ruby中做system("java -version"),那么在Groovy中这样做的惯用方法是什么?

1 个答案:

答案 0 :(得分:1)

"java -version".execute().text

不提供任何输出,因为此命令将其输出写入stdout。 (例如java -version 2>/dev/null不打印任何内容)

def pb = new ProcessBuilder("java -version").redirectErrorStream(true)

可行,但实际上存在错误,您尝试运行不存在的程序java -version。所以一个方法是:

def pb = new ProcessBuilder("java", "-version").redirectErrorStream(true)