如何在Java中捕获shell命令的退出状态?

时间:2012-10-15 09:23:04

标签: java junit exit-code

我正在为我的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;

甚至提出其他建议。 :)

4 个答案:

答案 0 :(得分:15)

您正在寻找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的内容,即使你不在乎,有些进程会在读取输出缓冲区之前阻塞(不完成)......

答案 1 :(得分:3)

您可以尝试使用ProcessBuilder类创建Process对象,其exitValue()可以为您提供帮助。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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