次のコードでJavaからスクリプトを実行しています。Runtime.getRuntime()。exec()から一度にすべてではなく行ごとにSTDOUTを取得
test.rb
が単純である
try (BufferedReader input = new BufferedReader(new InputStreamReader(Runtime.getRuntime()
.exec("ruby test.rb").getInputStream()))) {
String line = null;
while ((line = input.readLine()) != null) {
System.out.println("Got line: " + line);
}
}
:
puts "one"
sleep 1
puts "two"
問題は、すべての入力が同時にBufferedReader
に到着したということです。 2本の線の間に1秒の遅延があるはずです。スクリプトのすべての行の後にInputstream
をフラッシュする方法はありますか?私はJavaのGUIから、いくつかのRubyスクリプトを呼び出すと、スクリプトの出力を持ちたい
を達成しようとしている何
はtextpaneにインクリメンタルに表示されます。上記のコードを使用すると、スクリプトのSTDOUTは、スクリプトが終了したとき(そしてInputstream
がおそらくフラッシュされているとき)、一度にテキストペインに表示されます。
編集:
問題は、RubyがSTDOUTをバッファしていたことでした。 $stdout.sync = true
で修正。
ルビスクリプトに '$ stdout.sync = true'を追加します。 –
@SotiriosDelimanolisそれはそれでした。どうもありがとうございます。私はそれがこのようなものでなければならないことを知っていた。 – cilki