getruntime ejemplo java stream runtime runtime.exec printstream

java - ejemplo - Printing Runtime exec() OutputStream a la consola



runtime.getruntime().exec java (6)

Estoy tratando de obtener el OutputStream del Process iniciado por exec() a la consola. ¿Cómo puede hacerse esto?

Aquí hay un código incompleto:

import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import java.io.Reader; public class RuntimeTests { public static void main(String[] args) { File path = new File("C://Dir//Dir2"); String command = "cmd /c dir"; Reader rdr = null; PrintStream prtStrm = System.out; try { Runtime terminal = Runtime.getRuntime(); OutputStream rtm = terminal.exec(command, null, path).getOutputStream(); prtStrm = new PrintStream(rtm); prtStrm.println(); } catch (IOException e) { e.printStackTrace(); } } }


Creo que esto es lo que estás buscando:

String line; Process p = Runtime.getRuntime().exec(...); BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); while ((line = input.readLine()) != null) { System.out.println(line); } input.close();


Debe iniciar un nuevo hilo que lea el flujo de salida del terminal y lo copie en la consola, después de llamar a process.waitFor ()


Enfrenté el problema similar y estoy usando el siguiente código.

Process p = Runtime.getRuntime().exec("....."); p.waitFor(); String line; BufferedReader error = new BufferedReader(new InputStreamReader(p.getErrorStream())); while((line = error.readLine()) != null){ System.out.println(line); } error.close(); BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); while((line=input.readLine()) != null){ System.out.println(line); } input.close(); OutputStream outputStream = p.getOutputStream(); PrintStream printStream = new PrintStream(outputStream); printStream.println(); printStream.flush(); printStream.close();


Pruebe VerboseProcess desde jcabi-log :

String output = new VerboseProcess(new ProcessBuilder("foo.bat")).stdout();

La clase inicia un hilo de fondo, escucha el flujo de salida y lo registra.


Recientemente me encontré con este problema y solo quería mencionar que desde java 7, la API del creador de procesos se ha expandido. Este problema ahora se puede resolver con:

ProcessBuilder pb = new ProcessBuilder("yourcommand"); pb.redirectOutput(Redirect.INHERIT); pb.redirectError(Redirect.INHERIT); Process p = pb.start();

Espero que esto ayude :)


Si puede usar org.apache.commons.io.IOUTils desde commons-io,

System.out.println(IOUtils.toString(process.getInputStream())); System.err.println(IOUtils.toString(process.getErrorStream()));