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();
}
mira aquí: Extraer el código de salida de un proceso en el caso de ThreadInterrupted
Necesita obtener el código de retorno ... debe esperarlo.