我使用以下代碼從Java執行腳本。從Runtime.getRuntime()。exec()逐行獲取STDOUT而不是所有的一次
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);
}
}
哪裏test.rb
很簡單:
puts "one"
sleep 1
puts "two"
的問題是,所有的輸入同時到達的BufferedReader
。兩條線之間應該有1秒的延遲。腳本中的每行之後是否有刷新Inputstream
的方法?
我試圖完成
我想打電話從Java GUI一些Ruby腳本,並有腳本的輸出逐步顯示在一個textpane。使用上面的代碼,腳本中的STDOUT會在腳本終止時立即顯示在文本窗格中(並且可能會刷新Inputstream
)。
編輯:
問題是Ruby緩衝STDOUT。通過$stdout.sync = true
修復。
將'$ stdout.sync = true'添加到您的ruby腳本中。 –
@SotiriosDelimanolis就是這樣。非常感謝。我知道它必須是這樣的。 – cilki