En otros idiomas (como bash y Python), cuando generamos un proceso secundario, este nuevo proceso heredará stdout y stderr del padre. Esto significa que cualquier salida del proceso secundario se imprimirá en el terminal, así como también la salida del padre.Cómo redirigir el proceso hijo stdout/stderr al proceso principal stdout/stderr en Java?
¿Cómo podemos lograr el mismo comportamiento en Java?
Mi primer intento fue:
proc = Runtime.getRuntime().exec(cmd);
Pero no va a funcionar. Sobre la base de this answer y this answer, he sustituido el código con:
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectOutput(System.out);
pb.redirectError(System.err);
Pero esto ni siquiera se compila, ya que los argumentos son incompatibles con los parámetros del método esperados.
¿Quiere decir que necesito implementar un bucle que simplemente sigue leyendo de una secuencia y escribiendo en otra? Lo siento, no es factible. Demasiado trabajo (probablemente requiere ejecutar un nuevo hilo, e introduce muchos puntos de posibles errores). –
Puede o no ser esto lo que se solía requerir. Acabo de comprobar la API de Java 7 y parece que se ha solucionado: ahora puede llamar a redirectOutput pasando por Redirect.INHERIT que busca lograr lo que desea. – henry