有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从java运行grep命令后bash获取错误

我正在通过Java程序运行grep命令。在命令行上运行grep有时会在stderr上写入以下类型的错误:No such file or directory。我希望在Java程序中检测由于通过程序执行grep命令而导致的任何错误。我怎样才能实现我的这个目标?这是我到目前为止写的:

    Runtime rt = Runtime.getRuntime();
    String[] cmd = {"/bin/sh", "-c", "grep -c 'Search_String' /path/to/file(s)/being/searched"};
    Process proc = rt.exec(cmd);
    BufferedReader is = new BufferedReader(new 
    InputStreamReader(proc.getInputStream()));
    String line;
    while ((line = is.readLine()) != null) {
        System.out.println(line);
    }

共 (1) 个答案

  1. # 1 楼答案

    您可以检测流程是否返回错误;正如@Dakoda所提到的,exitValue()在进程结束之前不会有退出值,但使用waitFor()将阻止进程,直到进程结束并返回退出值:

    int rv = rt.waitFor();
    if (rv != 0) { ... }
    

    错误输出通常在stderr而不是stdout上,因此要读取错误,您可以使用:

    BufferedReader is = new BufferedReader(
      new InputStreamReader(proc.getErrorStream()));