Tôi muốn lấy đầu ra từ lệnh shell đang chạy dài vì nó có sẵn thay vì chờ lệnh hoàn thành. Mã của tôi được chạy trong một thread mớiJava Runtime.exec() đầu ra không đồng bộ
Process proc = Runtime.getRuntime().exec("/opt/bin/longRunning");
InputStream in = proc.getInputStream();
int c;
while((c = in.read()) != -1) {
MyStaticClass.stringBuilder.append(c);
}
Vấn đề ở đây là chương trình của tôi trong/opt/bin/longRunning phải hoàn thành trước khi InputStream được giao và đọc. Có cách nào tốt để làm điều này một cách không đồng bộ? Mục tiêu của tôi là một yêu cầu ajax sẽ trả về giá trị hiện tại MyStaticClass.stringBuilder.toString() mỗi giây hoặc lâu hơn.
Tôi bị kẹt trên Java 5, fyi.
Cảm ơn! W
Cảm ơn tất cả! Apache Commons 'Exec là con đường tôi đã đi. @Paul Cager, bạn cũng cung cấp một ý tưởng tuyệt vời. Kịch bản đã được gọi là trong thực tế phát hiện rằng nó đã được đường ống và ngăn chặn. Tuy nhiên luồng mà bạn nhận được từ Runtime.exec được đồng bộ hóa, vì vậy nếu bạn cố gắng đọc nó, nó đang chặn. – wmarbut