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