我在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中这样做的惯用方法是什么?
答案 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)