我有一个调用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只是导致了挂起。有谁知道如何继续让脚本运行?
答案 0 :(得分:1)
来自Runtime.exec()javadoc:
“在单独的进程中执行指定的字符串命令。”
假设您要等待进程结束,您需要等待进程在主java线程中终止。执行此操作的最佳方法是监视ProcessBuilder.start()返回的进程并等待Process.waitFor()。