我正在 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 中执行此操作的惯用方法是什么?
最佳答案
"java -version".execute().text
不会给您任何输出,因为此命令将其输出写入标准输出。 (例如 java -version 2>/dev/null
不打印任何内容)
def pb = new ProcessBuilder("java -version").redirectErrorStream(true)
可以工作,但实际上存在错误,您尝试运行程序java -version
,该程序不存在。因此,一种方法是:
def pb = new ProcessBuilder("java", "-version").redirectErrorStream(true)
关于java - Groovy 中的系统调用失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45800800/