3

我有一个调用 tcsh 脚本的 Java 应用程序,该脚本又调用同一目录中的 perl 脚本。如果我通过键入“runPerlScript.sh”从命令中运行此脚本,它会完全正常工作,并生成几个应有的输出文件。但是,如果我从 Java 调用脚本,请使用以下代码:

    String[] runCmd  = {"/bin/tcsh","-c","/filepath/runPerlScript.sh"};
    Process run = Runtime.getRuntime().exec(runCmd);

    BufferedReader reader = new BufferedReader(new InputStreamReader(run.getInputStream()));

    String line = "";
    line = reader.readLine();
    System.out.println("\nStarting while.");
    while((line)!=null){
        System.out.println("Output from script: "+line);
        line=reader.readLine();
    }
    reader.close();
    System.out.println("Finished running perl script.");

它将我的 shell 脚本中的 echo 语句打印到我的控制台(我正在使用 NetBeans),但只生成 4 个输出文件(通常它生成接近 50 个)。似乎该进程提前退出,因为在生成这 4 个文件之后,我的 shell 脚本中的 echo 语句显示“已完成运行 runPerlScript.sh”打印到我的控制台。我尝试了几种不同的方法来运行这个脚本,包括 ProcessBuilder,但似乎没有一种方法可以生成输出文件。我上面的代码实际上是我能够生成任何输出的唯一方法,因为 ProcessBuilder 只是导致挂断。有谁知道我怎样才能连续运行脚本?

4

1 回答 1

1

从 Runtime.exec() javadoc:

“在单独的进程中执行指定的字符串命令。”

假设您想等待进程结束,您将需要等待进程在您的主 java 线程中终止。最好的方法是监视 ProcessBuilder.start() 返回的 Process 并等待 Process.waitFor()。

于 2013-07-16T13:58:16.157 回答