【问题标题】:System calls in Groovy failsGroovy 中的系统调用失败
【发布时间】:2018-01-29 17:54:48
【问题描述】:

我正在探索 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 shell groovy processbuilder


    【解决方案1】:
    "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)
    

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2019-02-08
      相关资源
      最近更新 更多