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

Nir*_*ian 8 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();
Run Code Online (Sandbox Code Playgroud)

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

 if(exit_status==0)
     hasSameContents = true;
  else
     hasSameContents = false;
Run Code Online (Sandbox Code Playgroud)

甚至其他建议也很受欢 :)

Mad*_*mer 17

您正在寻找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();
Run Code Online (Sandbox Code Playgroud)

别忘了,你应该阅读内容,InputStream即使你不在乎,有些进程会在读取输出缓冲区之前阻塞(不完成)...


Adi*_*ain 5

您可以尝试使用ProcessBuilderclass 创建一个Process对象,它exitValue()应该可以帮助您。