varios pantalla metodo limpiar ejecutar desde consola como comandos borrar java windows cmd exec runtime.exec

pantalla - ejecutar varios comandos cmd desde java



Obtenga la salida del comando cmd del código java (3)

Tengo un programa donde pude ejecutar con éxito los comandos cmd de mi código, pero quiero poder obtener el resultado del comando cmd. ¿Cómo puedo hacer eso?

Hasta ahora mi código es:

Second.java:

public class Second { public static void main(String[] args) { System.out.println("Hello world from Second.java"); } }

y Main.java

public class Main { public static void main(String[] args) { String filename = args[1].substring(0, args[1].length() - 5); String cmd1 = "javac " + args[1]; String cmd2 = "java " + filename; Runtime r = Runtime.getRuntime(); Process p = r.exec(cmd1); // i can verify this by being able to see Second.class and running it successfully p = r.exec(cmd2); // i need to see this output to see if System.out.println("Done"); } }

Puedo verificar que el primer comando esté funcionando correctamente al buscar Second.class, pero ¿qué pasa si esta clase generó algún error? ¿Cómo podré ver ese error?


Necesita el OutputStream (InputStream) de su proceso (y debe usar ProcessBuilder) ... como ese

public static void main(String[] args) { String filename = args[1].substring(0, args[1].length() - 5); String cmd1 = "javac " + args[1]; String cmd2 = "java " + filename; try { // Use a ProcessBuilder ProcessBuilder pb = new ProcessBuilder(cmd1); Process p = pb.start(); InputStream is = p.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = null; while ((line = br.readLine()) != null) { System.out.println(line); } int r = p.waitFor(); // Let the process finish. if (r == 0) { // No error // run cmd2. } } catch (Exception e) { e.printStackTrace(); } }


Un ejemplo general para obtener el retorno de un comando sería:

Process p = null; try { p = p = r.exec(cmd2); p.getOutputStream().close(); // close stdin of child InputStream processStdOutput = p.getInputStream(); Reader r = new InputStreamReader(processStdOutput); BufferedReader br = new BufferedReader(r); String line; while ((line = br.readLine()) != null) { //System.out.println(line); // the output is here } p.waitFor(); } catch (InterruptedException e) { ... } catch (IOException e){ ... } finally{ if (p != null) p.destroy(); }