2
我在Java中使用ProcessBuilder来运行Perl脚本。当我在打印进程的InputStream时运行Perl脚本时,Java程序似乎在Perl脚本期间运行。但是,如果我注释掉主程序中的getOutPut方法,那么Java程序会以非常快的速度终止并且Perl脚本根本不会运行。为什么会发生?使用ProcessBuilder以Java运行Perl脚本
private final static String SCENARIO = "scen";
/**
* @param args
*/
public static void main(String[] args) {
ProcessBuilder pb = new ProcessBuilder("perl", SCENARIO+".pl");
pb.directory(new File("t:/usr/aman/"+SCENARIO));
try {
Process p = pb.start();
getOutput(p.getInputStream(), true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static List getOutput(InputStream is, boolean print) {
List output = new ArrayList<String>();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String s = null;
try {
while ((s = reader.readLine()) != null) {
output.add(s);
if(print){
System.out.println(s);
}
}
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
return null;
}
return output;
}
太棒了!你的回答很完美,你把我和一篇伟大的文章联系起来,以便进一步理解。非常感谢你! – Aman 2013-04-26 21:58:25
@Aman:不客气,很高兴我能帮助你。请注意,该文章的部分内容是过时的,因为它不像我们现在应该做的那样使用ProcessBuilder,我相信它的一些Windows调用现在不正确,但是一般原则仍然适用。 – 2013-04-26 22:02:20