前作ったプログラムでGoogleのguetzliを使おうと思ったら、外部プロセスの実行方法知らんぞ!ってなったんで調べてみた。(^^;)
BufferedReader br = null;
// 起動するコマンド、引数でProcessBuilderを作る。
ProcessBuilder pb = new ProcessBuilder("./aaa.sh", "arg0", "arg1");
// 実行するプロセスの標準エラー出力を標準出力に混ぜる。(標準エラー出力を標準入力から入力できるようになる)
pb.redirectErrorStream(true);
try {
// プロセス起動
Process process = pb.start();
// 起動したプロセスの標準出力を取得して表示する。
// 標準出力やエラー出力が必要なくても読んどかないとバッファがいっぱいになって
// プロセスが止まる(一時停止)してしまう場合がある。
InputStream is = process.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
while(true) {
String line = br.readLine();
if(line == null) {
break;
}
System.out.println(line);
}
// プロセスの終了を待つ。
int ret = process.waitFor();
// 終了コードを表示
System.out.println("ret = " + ret);
} catch (IOException ex) {
Logger.getLogger(TestProcess.class.getName()).log(Level.SEVERE, null, ex);
} catch (InterruptedException ex) {
Logger.getLogger(TestProcess.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if(br != null) {
try {
br.close();
} catch (IOException ex) {
Logger.getLogger(TestProcess.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
まー、こんな感じだ(^^;)
注意点は、コード中のコメントにも書いたが、起動したプロセスの標準出力、標準エラー出力は必要なくても読んどかないといけないことだ。ブロックしてしまうからだ。
コメント