- - PR -
外部コマンドの標準出力の取得
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-10-20 15:44
外部コマンドの標準出力の内容を得るには、以下のようなコーディングが考えられます。
このコーディングでですが、外部コマンドの動作が遅れた場合でも、標準出力の内容を全部取得できるものでしょうか? process.waitFor()で待てば大丈夫なんでしょうが、標準出力の量が多いとバッファが満杯になり、process.waitFor()の前にバッファを読み出す処理が必要になるようです。 (バッファを空けないと、外部コマンドの処理が止まってしまう) このあたりについてご存知の方がいらっしゃいましたら、教示お願い致します。 | ||||
|
投稿日時: 2006-10-20 15:56
私は力不足のため答えることが出来ませんが、このスレッドが参考になるかもしれないのでリンクしておきます。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27593&forum=12&0 _________________ 己への戒め 「活動的な馬鹿より恐ろしいものはない」 by ゲーテ | ||||
|
投稿日時: 2006-10-20 17:00
自己レスになりますが、HP-UX 11i,JDK5.0で、検証してみました。
その結果ですが、プロセスが終了するまで、br.readLine()で待っていました。 (標準エラー出力の取得でも同様です) ですので、外部コマンドが出力する内容は、process.waitFor()で同期を取らなくても、すべて取得できるものと考えられます。 (外部コマンドから標準出力と標準エラー出力の両方に出力するケースが無い限り、複雑な制御を行う必要は無いものと想います) | ||||
|
投稿日時: 2006-10-20 19:14
また自己レスになりますが、ProcessBuilderにより、標準エラー出力を標準出力にマージする事が可能でした。
ですから、標準エラー出力と標準出力をそれぞれ別々に見る必要が無い限り、マージする事により、(別スレッドから読み出しを行うような)複雑な制御を行わないで済むと考えられます。 |
1