Esto es una continuación de this question. La respuesta sugiere que hayCómo copiar flujos de entrada/salida del proceso a sus contrapartidas del sistema?
copiar el Proceso cabo, se equivocan, y los flujos de entrada a las versiones del sistema
con IOUtils.copy
de la siguiente manera (después de la fijación de diversos errores de compilación):
import org.apache.commons.io.IOUtils;
import java.io.IOException;
public class Test {
public static void main(String[] args)
throws IOException, InterruptedException {
final Process process = Runtime.getRuntime().exec("/bin/sh -i");
new Thread(new Runnable() {public void run() {
try {
IOUtils.copy(process.getInputStream(), System.out);
} catch (IOException e) {}
} }).start();
new Thread(new Runnable() {public void run() {
try {
IOUtils.copy(process.getErrorStream(), System.err);
} catch (IOException e) {}
} }).start();
new Thread(new Runnable() {public void run() {
try {
IOUtils.copy(System.in, process.getOutputStream());
} catch (IOException e) {}
} }).start();
process.waitFor();
}
}
Sin embargo, el código resultante no funciona para procesos interactivos como el que ejecuta el comando sh -i
. En el último caso, no hay respuesta a ninguno de los comandos sh
.
Así que mi pregunta es: ¿podría sugerir una alternativa para copiar las transmisiones que funcionarán con los procesos interactivos?
Gracias por la sugerencia. Sin embargo, 'IOUtil.copy()' no sale hasta que se llega al final de la secuencia, por lo que no es tan diferente de su código que tiene los mismos problemas con 'sh'. – vitaut
Pls eche un vistazo a este http://stackoverflow.com/questions/804951/is-it-possible-to-read-from-a-java-inputstream-with-a-timeout/808795#808795 –