【问题标题】:How to capture the exit status of a shell command in Java?如何在 Java 中捕获 shell 命令的退出状态?
【发布时间】:2012-10-15 09:23:04
【问题描述】:

我正在为我的 CSVreader 创建一个 Junit 测试文件。我正在读取 CSV 文件的内容并将内容写入另一个文件。我想使用 diff 实用程序比较它们,我想使用 diff 的退出状态来了解内容是否相同。一般$?给出退出状态,但我不知道如何捕获它并在我的代码中使用它。有人可以在这方面帮助我吗?

这就是我的代码的样子

 boolean hasSameContents = false;

    command="diff "+mp.get("directory")+"/"+fileName+" "+mp.get("outdir")+"/"+fileName;
    p= Runtime.getRuntime().exec(command);
    p.waitFor();

在此之后,我想获得退出状态并在这样的 if 条件下使用它

 if(exit_status==0)
     hasSameContents = true;
  else
     hasSameContents = false;

即使是替代建议也值得赞赏。 :)

【问题讨论】:

    标签: java exit-code


    【解决方案1】:

    您正在寻找Process#exitValue

    String command = "diff "+mp.get("directory")+"/"+fileName+" "+mp.get("outdir")+"/"+fileName;
    Process p = Runtime.getRuntime().exec(command);
    p.waitFor();
    int exitStatus = p.exitValue();
    

    别忘了,你应该阅读InputStream的内容,即使你不在乎,一些进程会阻塞(未完成)直到输出缓冲区被读取...

    【讨论】:

    • 非常感谢您提供阅读 InputStream 的建议!它在更改大量文件的文件权限时挽救了我的生命。
    【解决方案2】:

    您可以尝试使用ProcessBuilder 类创建一个Processobject,其exitValue() 应该可以帮助您。

    【讨论】:

      【解决方案3】:

      使用方法waitFor() of class Process。它返回一个int,进程的返回值。

      【讨论】:

        【解决方案4】:

        Runtime.exec() 和朋友返回一个Process 对象,该对象有一个返回退出代码的exitValue() 方法。

        【讨论】:

          猜你喜欢
          • 2017-03-08
          • 2013-04-25
          • 2013-03-01
          • 2011-06-21
          • 1970-01-01
          • 2014-11-01
          • 2019-09-14
          • 1970-01-01
          • 2021-01-13
          相关资源
          最近更新 更多