Mi piacerebbe ottenere l'output da un comando shell di lunga esecuzione in quanto è disponibile anziché attendere il completamento del comando. Il mio codice viene eseguito in un nuovo threadUscita asincrona Java Runtime.exec()
Process proc = Runtime.getRuntime().exec("/opt/bin/longRunning");
InputStream in = proc.getInputStream();
int c;
while((c = in.read()) != -1) {
MyStaticClass.stringBuilder.append(c);
}
Il problema di questo è che il mio programma in/opt/bin/longRunning deve completare prima che l'InputStream viene assegnato e leggere. C'è un buon modo per farlo in modo asincrono? Il mio obiettivo è che una richiesta Ajax restituirà il valore corrente MyStaticClass.stringBuilder.toString() ogni secondo circa.
Sono bloccato su Java 5, fyi.
Grazie! W
Grazie a tutti! L'Exec di Apache Commons è il modo in cui sono andato. @Paul Cager, hai anche fornito un'idea eccellente. Lo script che veniva chiamato stava infatti rilevando che era in corso il piping e il blocco. Tuttavia il flusso che si ottiene da Runtime.exec è sincronizzato, quindi se si tenta di leggerlo, si sta bloccando. – wmarbut